出于某种原因,我无法通过twitterAccounts来保存另一个数组数据。
ViewController.h
@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) NSArray *twitterAccounts;
@property (strong, nonatomic) IBOutlet UITableView *chooseTwitterAccountTableView;
- (void)twitterRequest;
@end
ViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
_twitterAccounts = [[NSArray alloc]init];
[self twitterRequest];
}
- (void)twitterRequest {
ACAccountStore *account = [[ACAccountStore alloc]init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
if (granted == YES) {
NSArray *twitterAccountsTemp = [account accountsWithAccountType:accountType];
_twitterAccounts = twitterAccountsTemp;
NSLog(@"Array first has: %lu elements.", [_twitterAccounts count]);
}
}];
}
我不明白的是,如果我有这样的viewDidLoad方法:
- (void)viewDidLoad
{
[super viewDidLoad];
_twitterAccounts = [[NSArray alloc]init];
[self twitterRequest];
NSLog(@"After method called: %lu", [_twitterAccounts count]);
}
输出结果为:
After method called 0.
Array first has: 1 elements.
因为我在输出数组中的元素数量之前调用方法,所以它不应该是另一种方式吗?
答案 0 :(得分:1)
requestAccessToAccountsWithType:
是异步方法,这意味着它
只有启动请求并返回。完成块
当请求完成时,后面称为 。
因此,在致电后
[self twitterRequest];
尚未分配_twitterAccounts
数组。请求完成后
并且调用完成块,执行_twitterAccounts = twitterAccountsTemp;
,
如有必要,您可以在此时更新UI。