保存NSManagedObjectContext的实例不会永久保存可变的可转换属性

时间:2010-10-25 09:36:52

标签: iphone core-data nsmanagedobject nsmanagedobjectcontext

我正在使用Core Data + sqlite作为数据缓存。应用程序将文件读​​入核心数据,然后使用Core Data运行应用程序。保存对NSManagedObjectContext和文件都进行了保存。但是,我注意到,如果我退出应用程序并重新加载它而不重新填充核心数据数据库,则使用-save:保存的一些(但不是全部)数据不会保存到数据存储中。

我的托管对象的更改都在主线程上的一个批处理中完成,并且在完成所有更改后发送-save:消息。未保存的数据是可转换属性,是核心数据对象中唯一可转换的属性。这是保存对象的代码:

    NSInteger columnIndex = [headers indexOfObject:questionID];
    if (NSNotFound != columnIndex) {

                    // parsedLine is a mutable array already
        NSMutableArray *parsedLine = person.dataFromFile.parsedLine;
        [parsedLine replaceObjectAtIndex:columnIndex withObject:answer];
        person.dataFromFile.parsedLine = parsedLine;

        person.questionsAnsweredByPerson = [NSNumber numberWithInt:[FileParser questionsAnsweredInRow:person.dataFromFile.parsedLine withRowHeaders:headers]];

        person.address.street.questionsAnsweredByPeopleOnStreet = [NSNumber numberWithInt:[self questionsAnsweredByPeopleOnStreet]];

        //NSLog(@"rawLineBefore:\n%@", person.dataFromFile.rawLine);
        person.dataFromFile.rawLine = [ReconstructCSV composeCSVLineFromArray:person.dataFromFile.parsedLine];
        //NSLog(@"rawLineAfter:\n%@", person.dataFromFile.rawLine);


        Voter_SurveyAppDelegate *appDelegate = (Voter_SurveyAppDelegate *)[[UIApplication sharedApplication] delegate];

        NSError *error;

        NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];
        if (![managedObjectContext save:&error]) {
            // XXX inform the user there was a fatal error opening the file. Low disk space?
            NSLog(@"Unresolved error - could not save managedObjectContext - %@, %@", error, [error userInfo]);
            abort();
        }
        return YES;
    }

中止();没有被召唤,所以我假设-save;被正确调用。

我怀疑它是否相关,但是在主线程上运行此代码后,我在另一个线程上使用新的NSManagedObjectContext执行NSFetchRequest。在其他线程上没有其他任何与Core Data相关的内容。

为什么不能保存可转换属性?

1 个答案:

答案 0 :(得分:1)

问题是可转换属性不喜欢Mutable对象。如this question的答案中所述,NSMutableDictionary未被保存。就我而言,它是一个NSMutableArray。