NSLog修复缺失值/崩溃?

时间:2012-11-28 08:26:48

标签: iphone objective-c ios

我的应用使用Social.frameworkACAccount从Facebook导入喜欢的内容。我将Facebook帐户标识符保存到NSUserDefaults,以便应用程序可以在后续启动时自动导入新的喜欢。第一次进口工作正常。问题是在后续启动时重新实例化ACAccount

所以我有一个facebookAccount吸气剂,看起来像这样:

- (ACAccount *)facebookAccount {
    if(!_facebookAccount) {
        ACAccountStore *accountStore = [[ACAccountStore alloc] init];
        NSString *accountIdentifier = [[NSUserDefaults standardUserDefaults] valueForKey:SWFacebookAccountIdentifierKey];

        if(accountIdentifier)
            _facebookAccount = [accountStore accountWithIdentifier:accountIdentifier];

    }
    return _facebookAccount;
}

这会返回一个不完整的ACAccount对象:

type:(null)
identifier: B6E94A67-AF94-408F-A618-6CD4D78564DC
accountDescription: Facebook
username: samvermette@gmail.com
objectID: x-coredata://589C098E-F829-4284-841B-EE4A0003FF21/Account/p2
enabledDataclasses: {(
    )}
enableAndSyncableDataclasses: {(
    )}
properties: {
    fullname = "Sam Vermette";
    uid = 716308665;
}
parentAccount: (null)
owningBundleID:(null) 

这将从最终使用此对象的方法中记录。正如您所看到的,type值为null,这使我的应用程序抛出以下异常:

  

NSInvalidArgumentException',原因:'此请求的帐户类型无效

现在,最奇怪的是,如果我在我的getter中NSLog(_facebookAccount)之前添加returntype键不为空,我的应用程序不会崩溃。我意识到NSLog修复这个问题可能暗示我的代码出了问题,但我无法弄明白究竟是什么。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

问题最终是ARC自动释放了拥有ACAccount个对象的帐户商店。

我通过将我的帐户商店分配给一个强大的媒体资源来修复此问题

@property (nonatomic, strong) ACAccountStore *accountStore;