ios - 核心数据 : Additional object inserted into Managed Object Context after restarting App

标签 ios core-data nsmanagedobject

加载 Root View Controller 后,应使用便捷方法创建名为Target 的托管对象:

- (void)viewDidLoad {
    [super viewDidLoad];

    if (context == nil) { 
       context = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
    }

    if ([fetchedResultsController.fetchedObjects count] < 1) {
       Target *aTarget = (Target *)[NSEntityDescription insertNewObjectForEntityForName:@"Target" inManagedObjectContext:context]; 
    }

    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) {
       // Update to handle the error appropriately.
       NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    }

     if(![context save:&error]){  
       //Handle error.
     } ...

如果我从 Xcode 在我的 iPhone 上运行该应用程序,它一切正常。但是,如果我停止测试运​​行并在 iPhone 上重新启动应用程序,即使出现这种情况,也会创建一个新的托管对象

[fetchedResultsController.fetchedObjects count] < 1) 

好像不太满意(最后是,就是不知道为什么)。一旦应用程序独立于 Xcode 在手机上运行,​​我就可以关闭并重新启动它,而不会增加创建的托管对象的数量。只有在与 Xcode 断开连接后的第一次。 备注:从 Xcode 断开连接会导致 Segmentation fault: 11 错误,当我从 Xcode 断开另一个 Core Data App 时也会出现该错误。所以我不会将此错误归因于我的问题。 任何想法如何防止应用程序创建这个额外的对象?您需要更多代码来解决问题吗?非常感谢。

最佳答案

仅根据我能看到的代码,我认为这段代码会在每次运行应用程序时第一次运行代码时创建一个新对象。

尝试切换第二个和第三个 if 语句,以便先执行提取。我会给你代码,但事实证明,在我的 iPad 上使用代码格式真的很痛苦。

关于ios - 核心数据 : Additional object inserted into Managed Object Context after restarting App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8693944/

相关文章:

iphone - 如何使 iPhone 应用程序能够容忍 CoreData 架构更改

swift - ( cocoa 错误1570。), "NSValidationErrorKey"错误

ios - NSFetchedResultsController 由 NSManagedObject 的 refreshObject 触发。为什么?

objective-c - 触摸绘制和删除线条

ios - Objective-C 中的委托(delegate)方法和 Swift 中的 View Controller 。如何调用协议(protocol)? - iOS

objective-c - NSPredicate 表达式过滤一对多关系的计数

arrays - 用核心数据属性填充数组

ios - 重写后从文件加载图像 - UIImage

ios - UIStackView 隐藏 View 动画

ios - 更新大型核心数据的值