我第一次使用Coredata
,我將一些值設置爲userinfo
實體,從usergroups
實體中提取一些值。應用程序崩潰在coredata中的對象ID爲它的主鍵字段
,而這樣做的過程我的申請得到墜毀說:
「以前未分配的對象ID爲它的主鍵 場,這是用於獲得核心數據 對象的永久ID項目。在調用保存managedObjectContext之前,請確保 指定了一個對象ID。
這看起來有點像
[newManagedObject setValue:[newManagedObject assignObjectId] forKey:[newManagedObject
primaryKeyField]]
。有問題的產品:
<Userinfo: 0x10695b30> (entity: Userinfo; id: 0x10695b70 <x-coredata://18875EDC-D300-4D63-90FC-181B2487599D-3229-000024DF842CC304/Userinfo/tA6216695-816F-4379-B24C-984AAFD1A8342>; data:
//讀取值的&修改
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Userinfo" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *datapredicate = [NSPredicate predicateWithFormat:@"username == %@",usermobileNumber];
[fetchRequest setPredicate:datapredicate];
[context executeFetchRequest:fetchRequest onSuccess:^(NSArray *results){
NSLog(@"results %@",[results valueForKey:@"firstname"]);
userinfoObject = [results objectAtIndex:0];
NSLog(@"userinfo %@",userinfoObject);
// userinfoObject = [[Userinfo alloc]initWithEntity:[NSEntityDescription entityForName:@"Userinfo" inManagedObjectContext:context] insertIntoManagedObjectContext:context];
[userinfoObject setValue:[userinfoObject valueForKey:@"firstname"] forKey:@"firstname"];
[userinfoObject setValue:[userinfoObject valueForKey:@"lastname"] forKey:@"lastname"];
[userinfoObject setValue:[userinfoObject valueForKey:@"email"] forKey:@"email"];
[userinfoObject setValue:[userinfoObject valueForKey:@"zipcode"] forKey:@"zipcode"];
[userinfoObject setValue:[userinfoObject valueForKey:@"password"] forKey:@"password"];
[userinfoObject setValue:[userinfoObject valueForKey:@"dateofbirth"] forKey:@"dateofbirth"];
[userinfoObject setValue:[userinfoObject valueForKey:@"username"] forKey:@"username"];
[userinfoObject setValue:[userinfoObject valueForKey:@"salutation"] forKey:@"salutation"];
// [userinfoObject setValue:[userinfoObject assignObjectId] forKey:[userinfoObject primaryKeyField]];
//添加值
Usergroups *userGroupsObject = [NSEntityDescription insertNewObjectForEntityForName:@"Usergroups" inManagedObjectContext:context];
[userGroupsObject setValue:contactObject.strGroupName forKey:@"groupname"];
[userGroupsObject setValue:[contactsStack objectAtIndex:i] forKey:@"mobile_contacts"];
[userGroupsObject setValue:usermobileNumber forKey:@"mobile_number"];
[userGroupsObject setValue:[userGroupsObject assignObjectId] forKey:[userGroupsObject primaryKeyField]];
NSError *error = nil;
if (![context saveAndWait:&error]) {
NSLog(@"There was an error! %@", error);
}
else {
NSLog(@"You created Usergroup object!");
}
[userinfoObject addUsergroupsObject:userGroupsObject];
'primaryKeyField'方法的作用是什麼?這不是標準的核心數據方法,而且似乎是您遇到麻煩的原因。這個是從哪裏來的? –
@TomHarrington:這與我正在使用的數據庫以及特定的Nsmanaged對象上下文相關,即我將objectId分配給數據庫創建的默認主鍵的usergroups對象。 – iOSDev
好吧,我不太明白你在說什麼,但是如果要用NSManagedObject的objectID來解決問題,你肯定會碰到崩潰和/或數據損壞。 –