返回对象不为null但为空

时间:2014-04-18 19:07:29

标签: ios objective-c core-data restkit null

我无法解决我对以下方法的一个小问题:

+ (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的初学者,我很确定解决方案很明显但我现在无法修复它。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

哦,我明白了。您只是为此方法创建了一个MOC,并且从未将其与您在方法范围之外使用的上下文合并,因此插入后的更改将保持未保存状态。我打赌很多人只是撇去了,因为整个MOC实体名/插入垃圾总是那么冗长。

我自己的方法与您的createUserForLoginWithFacebookToken:类似,我传入了我用作NSManagedObjectContext*类型的附加方法参数的MOC。我不会分配一个全新的MOC,在其中插入一个对象,然后合并。通常,每个线程都有一个MOC。