0
我正在使用AFNetworking庫從服務器提取JSON訂閱源以填充UIPickerView
,但我在處理異步方式時遇到了一些麻煩。 @property
classChoices
是用於填充UIPickerView
的NSArray
,因此網絡通話僅執行一次。但是,由於該塊在實例變量返回時尚未完成,因此getter返回nil,並最終導致我的程序稍後崩潰。任何幫助解決這個問題將不勝感激。如果您需要任何其他信息,請告知我。AFNetworking異步數據提取
PickerViewController.m classChoices消氣
- (NSArray *)classChoices {
if (!_classChoices) {
// self.brain here refers to code for the SignUpPickerBrain below
[self.brain classChoicesForSignUpWithBlock:^(NSArray *classChoices) {
_classChoices = classChoices;
}];
}
return _classChoices;
}
SignUpPickerBrain.m
- (NSArray *)classChoicesForSignUpWithBlock:(void (^)(NSArray *classChoices))block {
[[UloopAPIClient sharedClient] getPath:@"mobClass.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseJSON) {
NSLog(responseJSON);
if (block) {
block(responseJSON);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
if (block) {
block(nil);
}
}];
}
也許我之前並不清楚,但'classChoices'是一個'@ property';上面的代碼是重寫它的getter。另外,這已經是一個回調'SignUpPickerBrain'。在回調中放置一個回調似乎有點過於複雜,對吧?你說什麼會在_callback裏完成? – sethfri
在回調中放置回調很好,並不是特別複雜。無需重寫getter,只需將'classChoices'作爲標準的NSMutableArray,然後在需要更新數組時調用-classChoices(帶回調 - 我的代碼如上所示)。數組的更新將發生在_callback內部。我會更新答案以包含此代碼。 –
我編輯了代碼以使其與編譯器一致,但代碼仍然不起作用。該程序仍然崩潰,出現錯誤:線程1:EXC_BAD_ACCESS(代碼= 2,地址= 0x16)'。 – sethfri