2

CoreDataの更新について多くの質問を見ました。実際、私は簡単なアプリケーション連絡先リストアプリを作成しています。これには、追加、編集、削除、および更新の機能が含まれています。ここに私の更新コードがあります。動作して更新されますが、すべての連絡先リストが更新されます。特定の連絡先のみを更新する必要があります。

- (IBAction)updatePressed:(id)sender 
{
    delegate = [[AppDelegate alloc]init];
    delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    name2 = emailtxt1.text;
    email2 = nametext1.text;
    mobile2 = numbertxt1.text;
    dict = [[NSMutableDictionary alloc] init];
    [dict setObject:nametext1.text forKey:@"NAME"];
    [dict setObject:emailtxt1.text forKey:@"EMAIL"];
    [dict setObject:numbertxt1.text forKey:@"MOBILE"];
    [delegate UpdateDiary:dict];
}

- (void)UpdateDiary:(NSMutableDictionary *)dictionary
{
    NSLog(@"update book Details Function Entered");

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Diary"inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];

    NSArray *mutableFetchResult = [[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy] autorelease];

    if (mutableFetchResult == nil) {
        NSLog(@"Fetch result error %@, %@", error, [error userInfo]);
    }

    for (Diary *ob2 in mutableFetchResult) 
    {
        {
        ob2.name = [dictionary objectForKey:@"NAME"];
        ob2.email=[dictionary objectForKey:@"EMAIL"];
        ob2.phone=[dictionary objectForKey:@"MOBILE"];
        }
    }

    if(![self.managedObjectContext save:&error])
    {               
        if([error localizedDescription] != nil)
        {           
        NSLog(@"%@",error);
        }
        else
        {

        }
    }
}
4

2 に答える 2

1

フェッチ要求に述語を設定する必要があります。これにより、すべてをフェッチするのではなく、必要なオブジェクトを知ることができます。

あなたは次のようなことをすることができます:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"email == %@", anEmailAddress];

これを行った場合、フェッチ要求を実行した結果は、述語で設定した電子メールアドレスと一致するオブジェクトになります。

もちろん、同じ電子メールアドレスを持つオブジェクトが複数ある場合、フェッチ要求はそれらすべてをフェッチすることに注意してください。

アプリのより良い設計は、編集フォームに入るときに、編集しているCore Dataオブジェクトを、おそらくViewControllerのプロパティに保持することです。(フィールドに何を入力するかを知る必要があるので、その時点でそれを持っていると思います。)そうすれば、ユーザーが編集をコミットしようとしているときにフェッチを実行する必要はありません。 —保持しているオブジェクトを使用できます。

于 2012-08-09T14:31:17.613 に答える
0
- (void)UpdateBook:(NSMutableDictionary *)dictionary
    {


     NSLog(@"update book Details Function Entered");



     NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];


     NSEntityDescription *entity = [NSEntityDescription entityForName:@"Book"inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"bookID = %@", [dictionary objectForKey:@"vID"]];

     NSArray *mutableFetchResult = [[[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy] autorelease];

     if (mutableFetchResult == nil) {
        NSLog(@"Fetch result error %@, %@", error, [error userInfo]);
    }

    for (Book *ob2 in mutableFetchResult) 
    {

        {

            ob2.name = [dictionary objectForKey:@"VName1"];
            ob2.author=[dictionary objectForKey:@"VAuthor1"];
            ob2.discription=[dictionary objectForKey:@"VDiscription1"];
            ob2.bookID=[dictionary objectForKey:@"vID"];

        }
    }

    if(![self.managedObjectContext save:&error])
    {               
        if([error localizedDescription] != nil)
        {           
            NSLog(@"%@",error);
        }
        else
        {

        }
    }
}
于 2012-09-22T10:54:29.177 に答える