我正在尝试使用CoreData ObjectId存储我的唯一记录。有时我成功以这种格式获取ObjectID
<x-coredata://FC004E6F-F3D6-420E-871E-3E281571FB8B/Register/p4>
通过它我可以检索id,即4.但有时它以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];
}
请帮帮我。
答案 0 :(得分:3)
您不应该使用ObjectID
。如果你想使用主键,你真的应该创建自己的主键并取而代之。
ObjectID
可以并且会在几种不同的情况下改变你,导致许多问题。它旨在在应用程序的一个生命周期中在应用程序中使用。不建议在整个生命周期中使用它。
答案 1 :(得分: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);
}