【问题标题】:Strange behavior in deleting core data contents删除核心数据内容的奇怪行为
【发布时间】:2015-08-30 02:48:48
【问题描述】:

我使用以下代码删除coredata DB内容...我正确收到通知..但似乎数据没有删除...我无法弄清楚...

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];
       NSLog(@"FinalArray:%@",[finalArray objectAtIndex:currentImageIndex]);
       NSManagedObject *managedObject=[finalArray objectAtIndex:currentImageIndex];
       NSLog(@"NSManagedObject:%@",managedObject);
       for (int i=0;i<[items count];i++)
       {
           if ([managedObject isEqual:[items objectAtIndex:i]])
           {
               [self.managedObjectContext deleteObject:managedObject];
               NSLog(@"gone");
           }
       }
       NSNotificationCenter *nc=[NSNotificationCenter defaultCenter];
       [nc addObserver:self selector:@selector(deleteCheck:) name:NSManagedObjectContextObjectsDidChangeNotification object:self.managedObjectContext];
       NSLog(@"dffsdf%@",[errors description]);
       if (self.managedObjectContext==nil)
       {
           NSLog(@"deleted");
       }

通知函数调用

  - (void)deleteCheck:(NSNotification *)notification 
{
    NSLog(@"CoreData got Deleted");
    NSDictionary *userInfoDictionary = [notification userInfo];
    NSSet *deletedObjects = [userInfoDictionary objectForKey:NSDeletedObjectsKey];
    NSLog(@"DeletedObjects%@",deletedObjects);
}

由于每次点击删除按钮时都会调用 NSManagedObjectContextObjectsDidChangeNotification 通知...但在数据库中没有效果...请提出建议

【问题讨论】:

    标签: ios iphone core-data


    【解决方案1】:

    最后需要保存。

    NSError *error = nil;
    [self.managedObjectContext save:&error];
    

    【讨论】:

      【解决方案2】:

      您可以使用我使用的这个简单的删除方法,它的工作完美:

      -(void)deleteRecords{
      NSFetchRequest * deleteRequest = [[[NSFetchRequest alloc] init] autorelease];
      [deleteRequest setEntity:[NSEntityDescription entityForName:@"yourTabelName" inManagedObjectContext:context]];
      [deleteRequest setIncludesPropertyValues:NO]; //only fetch the managedObjectID
      
      NSError * error = nil;
      NSArray * cars = [context executeFetchRequest:deleteRequest error:&error];
      
      if ([cars count] !=0) {      
      
          //error handling goes here
      
          for (NSManagedObject * car in cars) {
      
              [context deleteObject:car];
          }
          NSError *saveError = nil;
          [context save:&saveError];
          //   [tableView reloadData];
      
      
      }
      else {
         NSLog(@"No Data To delete");
      
      } }
      

      【讨论】:

      • 这将完全删除您实体中的所有内容...我不希望这样我想删除用户选择的特定内容..也感谢您的回复...跨度>
      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多