返回对象不为空但为空

Posted

技术标签:

【中文标题】返回对象不为空但为空【英文标题】:Return object not null but empty 【发布时间】:2014-04-18 19:07:28 【问题描述】:

我无法解决以下方法遇到的小问题:

+ (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 变量存在,但所有属性均为零。

我是 Objective-c 的初学者,我很确定解决方案是显而易见的,但我现在无法修复它。

提前感谢您的帮助。

【问题讨论】:

调试器中的nil,还是NSLog输出中的nil? 它在调试器上(我的测试),所以我刚刚放了一个 NSLog,最后它们都为零。 【参考方案1】:

哦,我明白了。您正在为此方法创建一个 MOC,并且永远不会将它与您在方法范围之外使用的上下文合并,因此您在插入后所做的更改不会保存。我敢打赌,很多人只是略读而过,因为整个 MOC 实体名称/插入垃圾总是如此冗长。

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

【讨论】:

你完全正确!它完美地工作。谢谢 !为了获得我的 Moc,我使用了 appDelegate.managedObjectStore.mainQueueManagedObjectContext 并将其作为我的方法 createUserForLoginWithFacebookToken 的新参数传递。问题解决了! 是的。并且您将它作为参数传递而不是在方法中引用 App Delegate 的指针的原因是,将来您可以转向使用后台线程 MOC

以上是关于返回对象不为空但为空的主要内容,如果未能解决你的问题,请参考以下文章

linux字符测试

检查字段是否存在并且不为空

java判断字符串是不是为空

Bigquery 表元数据:类型 2 表为空但可查询

模型返回关系的动态属性但为空关系

jQuery为空但排除某个元素