从设置中删除Twitter帐户会使用iOS5 twitter框架崩溃应用程序

时间:2011-10-12 05:25:19

标签: iphone objective-c ios5

我使用iOS 5 Twitter框架并保存ACAccount对象。如果用户从设置中删除特定帐户,则应用程序(显然)会崩溃。我当前的解决方法只保存用户名并重新获取Twitter帐户数组并匹配用户名以获取正确的帐户。有没有更好的工作。我知道有来自ACAccountStore的通知

  

ACAccountStoreDidChangeNotification

但我没有收到它。

以下代码是固定版本。在这里,我将比较之前的帐户用户名。如果我删除它并使用之前用户选择的AccountObject,并且如果用户更改了该帐户,则应用程序将崩溃。

if([TWTweetComposeViewController canSendTweet])         {

        ACAccountStore *store = [[ACAccountStore alloc] init];
        ACAccountType *twitterType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
        [store requestAccessToAccountsWithType:twitterType withCompletionHandler:^(BOOL granted, NSError *error) 
         {

             if(granted)
             {
                NSArray *arrayOfAccounts =  [store accountsWithAccountType:twitterType];
                 if (arrayOfAccounts != nil && [arrayOfAccounts count]>0) {
                     for(ACAccount *anAccount in arrayOfAccounts)
                     {
                         if ([anAccount.username isEqualToString:previousAccount.username] ) {
                             [self setPhoneTwitterAccount:anAccount]; //alwAYS SET the new Account.
                             break;
                         }
                     }
                     //previous account was deleted if a userName match was not found
                     //show the picker or just pick the first account.
                     //TODO: provide a picker from here as well.
                     if (self.phoneTwitterAccount == nil) {
                         self.phoneTwitterAccount = [arrayOfAccounts objectAtIndex:0];
                     }

                 }
             }
         }];
    }

使用旧帐户时发生崩溃:

 TWRequest* twitterRequest_5 = [[[TWRequest alloc] initWithURL:profileURL 
                                                          parameters:parameters
                                                       requestMethod:TWRequestMethodGET]autorelease];

        [twitterRequest_5 setAccount:phoneTwitterAccount];    

        [twitterRequest_5 performRequestWithHandler:^(NSData *responseData,NSHTTPURLResponse *urlResponse, NSError *error);

1 个答案:

答案 0 :(得分:2)

我在ACAccounts上遇到了类似的问题,我的应用程序会崩溃,每次执行以下块时,调试器都会给我一个EXC_BAD_ACCESS:

performRequestWithHandler:^(NSData *responseData,NSHTTPURLResponse *urlResponse, NSError *error) 

当我在应用程序委托中将ACAccountStore保留为实例变量时,问题得以解决。也许您可以尝试在应用程序委托中分配和初始化ACAccountStore一次,然后在每次需要从中获取帐户数据时引用该实例,而不是在需要获取Twitter帐户数据时分配和初始化新实例。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
ACAccountStore *store = appDelegate._accountStore;

不清楚ACAccountStore和ACAccount之间的关系是什么,但文档说“每个ACAccount对象属于一个ACAccountStore对象。”。我认为这意味着如果我不保留我的ACAccount实例来自我的ACAccount实例,那么在某些时候可能会出现问题。

让我知道这是否有帮助,完全错误,或者有人可以解释这里真正发生的事情。