将NSManagedObjectID保存在plist文件中

时间:2013-06-30 19:27:11

标签: ios core-data plist nsmanagedobjectid

我正在开发一个使用CoreData的应用。 出于我的应用程序的目的,我想保存对象的managedObjectId(在plist文件中),以便在下次应用启动时检索此对象。

经过一些研究,我试过了:

myDictionary setObject:self.myPerson.objectID.URIRepresentation.absoluteString forKey:@"lastSelectedPerson"];
// Then I write the dictonary into a file
// I get a value like "x-coredata://8CF33004-BADD-402D-9AA5-115A030F901A/Person/p1"

myPerson是一个已保存在managedObjectContext

中的对象

接下来我试图检索objectID,但是我用这段代码获得了一个nil值:

// After retrieving the dictonary from the plist file
NSString * lastSelectedPersonId = [myDictionary objectForKey:@"lastSelectedPerson"];
NSManagedObjectID * objectID = [self.managedObjectContext.persistentStoreCoordinator managedObjectIDForURIRepresentation:[NSURL URLWithString:lastSelectedPersonId]];
self.myPerson = (Person *)[self.managedObjectContext existingObjectWithID:objectID error:&error];

你有什么建议吗? 感谢。

2 个答案:

答案 0 :(得分:1)

要在下次启动时恢复对象,您也可以尝试以下操作:

  1. 将objectID保存到NSUserDefaults:

    [[NSUserDefaults standardUserDefaults] setObject:self.myPerson.objectID forKey:@"lastSelectedPerson"]; 
    [[NSUserDefaults standardUserDefaults] synchronize];
    
  2. 在NSUserDefaults的下一次启动获取值:

    NSNumber *lastSelectedPersonID = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastSelectedPerson"];
    
  3. 查询核心数据存储以获取对象:

    - (Person *)personWithID:(NSNumber *)personID {
    
    Person *person = nil;
    
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    request.entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
    request.predicate = [NSPredicate predicateWithFormat:@"objectID == %@", personID];
    
    NSError *error = nil;
    NSArray *persons = [self.managedObjectContext executeFetchRequest:request error:&error];
    
    person = [persons lastObject];
    
    return person;
    }
    

答案 1 :(得分:0)

我有一个类似的问题,我正在创建一个托管对象并取消对象ID,但它还没有保存到磁盘。如果是这种情况,则对象id是“临时”id。我会检查使用:[NSManagedObjectID isTemporaryID]

如果它返回它是一个临时id,你需要保存对象并确保你有一个永久id。

文档: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectID_Class/Reference/NSManagedObjectID.html#//apple_ref/occ/instm/NSManagedObjectID/isTemporaryID