我有一个名为'场所'的数组,我正在用以下方法生成。我试图在不同的方法中重用它,但每次我尝试以不同的方法访问它时,数组都是'null'。方法是:
- (void)startSearchWithString:(NSString *)string {
[self.lastSearchOperation cancel];
self.lastSearchOperation = [Foursquare2
venueSearchNearLocation:@"Chicago" query:nil limit:nil intent:intentCheckin radius:nil categoryId:string
callback:^(BOOL success, id result){
if (success) {
NSDictionary *dic = result;
NSArray *venuesDic = [dic valueForKeyPath:@"response.venues"];
self.venues = [SearchVenue placesWithArray:venuesDic];
NSLog(@"self.venues inside is %@",self.venues);
} else {
NSLog(@"%@",result);
}
}];
NSLog(@"self.venues outside is %@",self.venues);
}
日志内容中的自我。 self.venues外部日志(null)。 我正在尝试__block但没有成功。
在我的.h我有:
@property (strong, nonatomic) NSArray *venues;
答案 0 :(得分:0)
回调块在venueSearchNearLocation
完成后异步执行。
您的日志代码:
NSLog(@"self.venues outside is %@",self.venues);
可能会在回调块之前执行,因此self.venues仍为零。
您必须在回调块完成后访问self.venues。
你如何做到这真的取决于你的应用程序。丢失耦合的一种方法是在设置阵列后发布通知。
[[NSNotificationCenter defaultCenter] postNotificationName:
@"VENUES_RECEIVED " object:nil];
在某些初始化程序中,您需要收听该通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receivedVenus)
name:@"VENUES_RECEIVED" object:nil];
当然,您需要一种可以使用数组的方法
- (void) receivedVenus
{
NSLog(@"self.venues outside is %@",self.venues);
}
不要忘记删除您的观察者(即在dealloc中)
[[NSNotificationCenter defaultCenter] removeObserver:self];
答案 1 :(得分:-1)
尝试
NSArray *venuesDic = [NSArray arrayWithArray:[dic valueForKeyPath:@"response.venues"]];