我使用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);
答案 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实例,那么在某些时候可能会出现问题。
让我知道这是否有帮助,完全错误,或者有人可以解释这里真正发生的事情。