[英]Why can't I return an object from my block?
我正在嘗試從我的方法中的塊返回NSMutableArray
,但是當我添加該行時, return [responseString JSONValue];
,我得到一些編譯器警告。
- (NSMutableArray*)getTodayData:(NSDate*)today
{
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:[dateFormat stringFromDate:today] forKey:@"target_date"];
NSError *error = [request error];
[request setCompletionBlock:^{
NSString *responseString;
if (!error) {
responseString = [request responseString];
return [responseString JSONValue];
} else {
NSLog(@"error: %@", error);
}
}];
[request setFailedBlock:^{
NSString *responseString;
if (!error) {
responseString = [request responseString];
} else {
NSLog(@"error: %@", error);
}
}];
[request startAsynchronous];
}
您期望返回一個對象做什么? 假設您交給ASIFormDataRequest
的完成塊被聲明為void (^)()
(或dispatch_block
或其他評估為void (^)()
typedef)。 鑒於此,調用該塊的代碼不期望返回值。 就像實現一個聲明為- (void)foo
並嘗試從中返回一個對象一樣; 只是沒有意義。
編輯:重新閱讀代碼后,我希望您真正想做的是從-getTodayData:
返回一個值。 但是,您正在執行異步請求。 -getTodayData:
方法在執行塊之前已經很久才返回 。
該setCompletionBlock:
和setFailedBlock:
在方法ASIFormDataRequest
不接受帶有返回值的塊。 您需要重組代碼,以便沒有返回值。
例如:
- (void)viewDidLoad
{
[self getTodayData:self.datePicker.date];
}
- (void)getTodayData:(NSDate*)today
{
self.appointmentsArray = [NSArray array]; // set it to an empty value now, so the table view displays nothing
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:[dateFormat stringFromDate:today] forKey:@"target_date"];
NSError *error = [request error];
[request setCompletionBlock:^{
NSString *responseString;
if (!error) {
responseString = [request responseString];
self.appointmentsArray = [responseString JSONValue];
[self.appointmentsArrayTableView reloadData]; // I'm assuming you want to display the appointments in some view
} else {
NSLog(@"error: %@", error);
}
}];
[request setFailedBlock:^{
NSString *responseString;
if (!error) {
responseString = [request responseString];
} else {
NSLog(@"error: %@", error);
}
}];
[request startAsynchronous];
}
該塊定義為void
。 考慮一下您如何嘗試與模塊互動。 您想從街區返回什么? 它會返回給誰? 怎么樣?
我認為您遇到的一個誤解是處理異步編程。 您的方法- (NSMutableArray*)getTodayData:(NSDate*)today
實際上僅發送請求 。 它不返回數組。 您發送請求,請求將在完成后執行該塊。 但是,在執行該塊時,您的程序已經從getTodayData:
方法返回了。 它沒有返回值。
您要做的是使用委托 。 當請求完成時執行該塊時,您可以通知委托人,響應現在已存儲在某個位置(最好是實例變量),現在可以訪問了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.