0

私は2つのエンティティ(関係なし)を持つデータベース(coredata)を持っています...私の場合、挿入とフェッチはうまくいきます。しかし、一部を削除すると非常に厄介です。1つのエンティティのオブジェクトは削除されましたが、他のオブジェクトは削除されませんでした。 。

これが私のコードです:

    -(void)deleteObject:(NSString *)entityDescription //entityDescription get entity name 
       {
            NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
                        NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:self.managedObjectContext];
                        [fetchRequest setEntity:entity];
                        NSError *errors;
                        NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&errors];
                        NSManagedObject *managedObject=[finalArray objectAtIndex:currentImageIndex];
                        for (int i=0;i<[items count];i++)
                        {
                            if ([managedObject isEqual:[items objectAtIndex:i]])
                            {
                                 [self.managedObjectContext deleteObject:managedObject];
                            }
                        }

                            NSLog(@"%@ object deleted", entityDescription);

                         NSNotificationCenter *nc1=[NSNotificationCenter defaultCenter];
                        [nc1 addObserver:self selector:@selector(deleteCheck:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
NSError *error;
                if (![self.managedObjectContext save:&error])
                {
                    NSLog(@"error occured during save = %@", error);
                }
                else
                {
                    NSLog(@"deletion was succesful");
                } 

この私のコードは、他のエンティティからオブジェクトを削除するために同じメソッドに従います... entitydescriptionは、別のメソッドから異なるエンティティ名を取得します... Itzは、あるエンティティではうまく機能し、別のエンティティでは機能しません...しかし、私はmanagedObjectContextの削除に成功したメッセージ(btは削除されていませんfrm DB)..これを解決するにはどうすればよいですか?

4

1 に答える 1

0

それを絞り込むためにあなたがするかもしれないいくつかのこと:

  NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&errors];
  // Add this to see that you are returning items from your fetch
  NSLog(@"%i objects returned in items array",items.count);
  NSManagedObject *managedObject=[finalArray objectAtIndex:currentImageIndex];
  // Add this to see what your fetch is returning
  NSLog(@"Fetch returned %@", managedObject);
  for (int i=0;i<[items count];i++)
  {
     // Add this to see for yourself if it is equal to managedObject
     NSLog(@"Testing: %@",[items objectAtIndex:i]);
     if ([managedObject isEqual:[items objectAtIndex:i]])
     {
        [self.managedObjectContext deleteObject:managedObject];
        // Move this to here so you know each time an object is deleted
        NSLog(@"%@ object deleted", entityDescription);
     }
   }

オブジェクトが等しいかどうかではなく、オブジェクトのプロパティをテストしたいのではないかと思います。何かを削除したかどうかに関係なく、ループが終了したときに「オブジェクトが削除されました」と報告していました。管理対象オブジェクトのプロパティをテストするつもりなら、テストを次のように変更します。

If ([managedObject.propertyToTest isEqual:[items objectAtIndex:i]])

または各アイテムのプロパティ:

If ([managedObject isEqual:[items objectAtIndex:i].propertyToTest])
于 2012-09-24T11:35:38.143 に答える