ios/objective-c:保存核心数据时出错

Posted

技术标签:

【中文标题】ios/objective-c:保存核心数据时出错【英文标题】:ios/objective-c: Error saving in core data 【发布时间】:2015-10-19 21:52:40 【问题描述】:

我正在尝试将某个 JSON 创建的对象保存在核心数据中,但它没有保存。我怀疑问题是我创建托管对象上下文太多次或试图保存到错误的托管对象上下文。当我收到 managedobjectcontext = nil 错误时,我必须继续声明它。想知道是否有人可以帮助我发现我一直没有发现的错误。

-(void) importItems:(NSArray *)ItemsToImport

    int i;
    int max = [itemsToImport count];
    IDItemServer *importItem;//this is import object
    Items *Item; //this is core data entity

    NSManagedObjectContext *context = self.managedObjectContext;
    for (i=0;i<max;i++)
    
        NSLog(@"value of i is%d:",i);
        importItem = ItemsToImport[i];

            NSString *name = importItem.name;
            NSString *sub = importItem.sub;
     //save our new and updated changes to the Core Data store
            NSManagedObjectContext *context = [IDModel sharedInstance].managedObjectContext;

            NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:context];
        //was self.managedObjectContext
        // Initialize Record
        NSManagedObject *record = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];

            // Populate Record
         [record setValue:name forKey:@“name”];
         [record setValue:sub forKey:@“s”ub];

        
            // Save Record
        NSError *error = nil;
        NSLog(@"BEFORE SAVE”);//Logs to console
        if ([context save:&error]) 
            NSLog(@"AFTER SAVE”);//does not log to console


         else 
        if (error) 

        NSLog(@"%@, %@", error, error.localizedDescription);//does not log to console
        

        // Show Alert View
        [[[UIAlertView alloc] initWithTitle:@"Warning" message:@"Your Item could not be saved." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
//THIS ALERT FIRES
        


【问题讨论】:

你们为什么有这么多不同的 MOC?他们真的不一样吗?它们是如何创建的?除非它们都是 NSMainQueueConcurrencyType,否则你就违反了各种核心数据规则。另外,请解释您期望此代码做什么,以及它在做什么是不正确的。仅仅说它不储蓄是不够的。如果您没有收到日志消息,那么当您单步执行调试器时会发生什么?此外,您的代码示例有问题。我试图重新格式化它以使其更易于阅读,并且您的大括号不平衡,表明存在其他问题。 这个方法实际上是从viewdidload中另一个方法调用的另一个方法调用的。由于 VC 中已经有一个延迟加载的 MOC,最初我认为这就足够了。但我得到 MOC 是零错误。为了摆脱这些,在回答 SO 之后,我不断添加 MOC,但可能太多了。我会试着把它们剪掉。 (多余的大括号是删掉很多无关的注释代码和注释的结果。) 我怀疑在你编辑你的问题之前你会得到很多帮助。我知道我什至不会尝试再次阅读它,直到我看到它已经显着更新。 代码已尽可能简化以仍然显示问题。如果您觉得它很费力,您无需再阅读它。 【参考方案1】:

这里确实有一个不必要的上下文。应该删除第 8 行的那个。还要检查每当您调用或使用 MOC 时,您使用的是一致的名称,即“* context”与“* managedobjectcontext”

【讨论】:

以上是关于ios/objective-c:保存核心数据时出错的主要内容,如果未能解决你的问题,请参考以下文章

保存核心数据时出错

保存到与核心数据的许多关系时出错

核心数据错误代码=134030“保存时出错”,没有用户信息

IOS/Objective-C:无法显示核心数据信息

IOS / Objective-C:核心数据NSPredicate使用IN不返回所有匹配

尝试访问核心数据时出错