将数据重新加载到NSArray中的麻烦(可能是因为ARC)

时间:2011-11-18 14:38:41

标签: iphone ios nsarray automatic-ref-counting

我的UITableView重新加载时调用了以下方法:

-(NSArray *)theAccounts {

    if (__theAccounts != nil) {
        return __theAccounts;
    }

    // Create an account store object.
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];

    // Create an account type that ensures Twitter accounts are retrieved.
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    // Request access from the user to use their Twitter accounts.
    [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
        if(granted) {
            // Get the list of Twitter accounts.
            NSArray *accountsArray = [[NSArray alloc] initWithArray:[accountStore accountsWithAccountType:accountType]];
            self.theAccounts = accountsArray;
        }
    }];

    return __theAccounts;        

}

.h中的Setter方法:

@property (strong, nonatomic) NSArray *theAccounts;

和.m:

@synthesize theAccounts = __theAccounts;

我希望能够有效地清空自己。帐户和重新加载。所以我创建了一个resync方法,但在重新加载表后它永远不会返回任何值:

-(void)resyncAccounts {
    self.theAccounts = nil;
    [self.tableView reloadData];
}

我在iOS 5 SDK上使用ARC。这可能是个问题吗?我之前用fetchedResultsController完成了类似的操作并且没有问题,但那不是ARC。值得注意的是它确实在第一次调用时返回数据,并在此之后返回__TheAccounts,直到我尝试 - (void)resyncAccounts {}。

2 个答案:

答案 0 :(得分:1)

为什么不在完成处理程序中设置“theAccounts”后重新加载tableView?另外,在将它设置为nil之后,你不应该把它称为“self.theAccounts”吗?

答案 1 :(得分:0)

在getter中

,你第一次返回nil,因为块还没有执行