2012-11-28 29 views
4

我的應用從Social.frameworkACAccount導入喜歡從Facebook。我將Facebook帳戶標識保存到NSUserDefaults,以便應用程序可以在後續啓動時自動導入新喜好。第一個導入工作正常。問題是在後續啓動時重新實例化ACAccountNSLog修復缺失值/崩潰?

所以我有一個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: [email protected] 
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「的,理由是:」無效的賬戶類型對於此請求

現在,奇怪的是,如果我在我的獲得者的return之前加上NSLog(_facebookAccount),則type鍵不爲空,並且我的應用不會崩潰。我意識到,NSLog修復這可能暗示我的代碼有問題,但我無法弄清楚究竟是什麼。有任何想法嗎?

+0

必須保留_facebookAccount,如果你是回來後寫的NSLog,這將顯示垃圾值,因爲它已經返回固定這一點。 – fibnochi

+0

@fibnochi他使用ARC,所以他不能使用保留。事實上,山姆,你可以將它存儲在一些伊維爾或全球變量中,然後嘗試打印它。 –

+0

facebookAccount被設置爲一個強大的屬性,因此它被保留。問題是我需要保持accountStore。 – samvermette

回答

4

問題最終導致ARC自動發佈擁有ACAccount對象的帳戶存儲。

我通過給我的賬戶店鋪以強大的性能

@property (nonatomic, strong) ACAccountStore *accountStore; 
+0

這有幫助。調升。謝謝。 –