4

Social.framework私のアプリは、とを使用してFacebookからいいねをインポートしACAccountます。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'、reason:'このリクエストのアカウントタイプが無効です

さて、最も奇妙なことは、ゲッターNSLog(_facebookAccount)の直前に追加した場合、キーがnullでなく、アプリがクラッシュしないことです。NSLogがこれを修正することは、私のコードに問題があることのヒントかもしれないことを理解していますが、正確に何を理解することはできません。何か案は?returntype

4

1 に答える 1

4

問題は、ARCがACAccountオブジェクトを所有するアカウントストアを自動リリースしていたことでした。

アカウントストアを強力なプロパティに割り当てることでこれを修正しました

@property (nonatomic, strong) ACAccountStore *accountStore;
于 2012-11-28T10:08:16.353 に答える