Проблема с перезагрузкой данных в NSArray (возможно, из-за ARC) - PullRequest
0 голосов
/ 18 ноября 2011

У меня вызывается следующий метод при перезагрузке 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:

@property (strong, nonatomic) NSArray *theAccounts;

и в .m:

@synthesize theAccounts = __theAccounts;

Я хотел бы иметь возможность эффективно очищать self.theAccounts и перезагружать.Поэтому я создал метод повторной синхронизации, но он никогда не возвращает никаких значений после перезагрузки таблицы:

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

Я использую ARC в iOS 5 SDK.Может ли это быть проблемой?Я сделал то же самое с fetchedResultsController и у меня не было проблем, но это не ARC.Стоит отметить, что он возвращает данные при первом вызове и возвращает __TheAccounts после этого, пока я не попытаюсь - (void) resyncAccounts {}.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Почему бы вам не перезагрузить tableView после установки «theAccounts» в обработчике завершения? Кроме того, разве вы не должны называть "self.theAccounts" после установки его в ноль?

0 голосов
/ 18 ноября 2011

в получателе, вы возвращаете ноль в первый раз, потому что блок еще не выполнен

...