0

我正在尝试使用 CoreData ObjectId 存储我的唯一记录。有时我成功地以这种格式获取 ObjectID

<x-coredata://FC004E6F-F3D6-420E-871E-3E281571FB8B/Register/p4>

通过它我可以检索 id 即 4.But 有时它以 ObjectId 的这种格式返回

<x-coredata:///Playlist/tC481615F-4ABA-4CDA-B703-D1E6303B455D3>

即 NSTemporaryObjectID_Default 这太烦人了。我从我的 IOS 模拟器中清理了我的项目,清理了 Xcode,但它不能正常工作。

这是我获取对象 ID 的代码:

-(IBAction)TestButton:(id)sender
{
    appObject=(AppDelegate*)[[UIApplication sharedApplication]delegate];
    NSManagedObjectContext *context =[appObject managedObjectContext];
    NSManagedObject *playlistContact;
    NSManagedObjectID *moID = [playlistContact objectID];
    NSString *aString = [[moID URIRepresentation] absoluteString];
    NSArray *theComponents = [aString componentsSeparatedByString:@"/p"];
    NSInteger theZpk = [[theComponents lastObject] intValue];
    playlistId=[NSString stringWithFormat:@"%ld",(long)theZpk];
}

请帮我。

4

2 回答 2

3

你不应该使用ObjectID它。如果您正在寻找使用主键,您真的应该创建自己的主键并从中获取。

在导致许多问题的几种不同情况下,ObjectID可以并且会改变你。它旨在在应用程序的一个生命周期内在应用程序中使用。不建议在整个生命周期中使用它。

于 2014-09-12T07:29:43.220 回答
1

objectID使用:

-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
                               error:(NSError **)error

要获得永久objectID使用权obtainPermanentIDsForObjects,例如:

NSManagedObject *contact = [NSEntityDescription insertNewObjectForEntityForName:self.entityName inManagedObjectContext:context];
NSError *error = nil;
if (![context obtainPermanentIDsForObjects:
      @[contact] error:&error]) {
    NSLog(@"Couldn't obtain a permanent ID for object %@",
          error);
}
于 2014-09-12T07:47:52.730 回答