iOS - 实例数组不保存数据

时间:2013-12-29 21:26:01

标签: ios objective-c nsarray

出于某种原因,我无法通过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.

因为我在输出数组中的元素数量之前调用方法,所以它不应该是另一种方式吗?

1 个答案:

答案 0 :(得分:1)

requestAccessToAccountsWithType:异步方法,这意味着它 只有启动请求并返回。完成块 当请求完成时,后面称为

因此,在致电后

[self twitterRequest];

尚未分配_twitterAccounts数组。请求完成后 并且调用完成块,执行_twitterAccounts = twitterAccountsTemp;, 如有必要,您可以在此时更新UI。