我正在尝试从我的方法中的块中返回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];
}
答案 0 :(得分:4)
你期望返回一个物体做什么?据推测,您提交给ASIFormDataRequest
的完成块被声明为void (^)()
(或dispatch_block
或其他一些评估为void (^)()
的typedef。鉴于此,调用块的代码不期望返回值。这就像实现一个声明为- (void)foo
的方法并尝试从中返回一个对象;它只是没有意义。
编辑:重新阅读您的代码后,我希望您真正想做的是从-getTodayData:
返回一个值。但是,您正在执行异步请求。在块执行之前,方法-getTodayData:
已经已经返回。
答案 1 :(得分:4)
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];
}
答案 2 :(得分:1)
该块定义为void
。想想你是如何尝试与块进行交互的。你想从街区回来的是什么?谁会回归?怎么样?
我认为你有一个误解就是处理异步编程。您的方法- (NSMutableArray*)getTodayData:(NSDate*)today
实际上只发送请求。 不返回一个数组。您发送请求,请求将在块完成后执行。但是当程序块执行时,您的程序将从getTodayData:
方法返回。它将具有否返回值。
您要做的是使用delegate。当在请求完成时执行块时,您可以通知代理该响应现在存储在某处 - 最好是作为实例变量 - 现在可以访问了。