我有一个请求访问Twitter的方法,然后使用- (void) setUsername:(NSString *)username
设置用户名。我必须传递ACAccountStore.requestAccessToAccountsWithType...
一个完成处理程序(块),如下所示:
[self.accounts requestAccessToAccountsWithType:twitterAccountType options:NULL completion:^(BOOL granted, NSError *actualError) {
if(granted == YES) {
self.haveTwitterAccess = YES;
ACAccount *account = [self.accounts accountsWithAccountType:twitterAccountType][0];
[self setUsername: account.username];
// [...]
但是,当我执行此操作时,我会在EXC_BAD_ACCESS
方法中获得setUsername
(我正在尝试传递account.username
)。如果我尝试NSLog(@"%@", account.username);
,那么我可以看到该值是正确的,但当传递给setUsername
时,username
变量为nil
。
我想它会在这里的某个线程之间发布,但我不确定,所有这些新的ARC内容是什么,如何阻止它发生。从本质上讲,这归结为我猜想在线程之间传递字符串?
我尝试了[account.username copy]
之类的内容并将帐户存储设置为retain
等,但似乎没有任何效果。我还尝试使用:
self
__block UserManager *blockSafeSelf = self;
如何确保保留从回调块传递到另一个对象上的方法的变量?
这是一个名为UserManager
的类,它有一个属性
@property (nonatomic) ACAccountStore *accounts;
处理Twitter访问。它还有方法:
- (void) setUsername: (NSString *) username;
我正在尝试使用完成块内的帐户用户名来调用。我希望这有助于更好地确定问题。
username
是UserManager
的属性,声明如下:
@property (nonatomic) NSString *username;