我无法解决我对以下方法的一个小问题:
+ (User *) createUserForLoginWithFacebookToken: (NSString *) facebookToken andExpirationToken: (NSDate *) expirationToken{
//Init current user before having collected data from API after authentication
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
managedObjectContext.parentContext = [RKManagedObjectStore defaultStore].mainQueueManagedObjectContext;
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"User" inManagedObjectContext:managedObjectContext.parentContext];
User * result = [[User alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:managedObjectContext];
result.email=@"defaultValue@test.com";
result.gender=[NSNumber numberWithInt:-1];
if (facebookToken != nil && expirationToken != nil && ![facebookToken isEqualToString:@""] && [expirationToken compare:[NSDate date]]==NSOrderedDescending) {
result.facebookToken=facebookToken;
result.facebookExpiration=expirationToken;
}
return result;
}
返回前,创建结果变量并设置一些属性。但是当我用这种方法获取这个返回的对象时:
currentUser=[User createUserForLoginWithFacebookToken:facebookToken andExpirationToken:facebookExpiration];
currentUser变量存在,但所有属性都是nil。
我是objective-c的初学者,我很确定解决方案很明显但我现在无法修复它。
提前感谢您的帮助。
答案 0 :(得分:1)
哦,我明白了。您只是为此方法创建了一个MOC,并且从未将其与您在方法范围之外使用的上下文合并,因此插入后的更改将保持未保存状态。我打赌很多人只是撇去了,因为整个MOC实体名/插入垃圾总是那么冗长。
我自己的方法与您的createUserForLoginWithFacebookToken:
类似,我传入了我用作NSManagedObjectContext*
类型的附加方法参数的MOC。我不会分配一个全新的MOC,在其中插入一个对象,然后合并。通常,每个线程都有一个MOC。