2011-04-19 53 views
1

我在Objective-C Mac应用程序中使用ASIHTTPRequest。我创建了一个访问Web服务的公共API(通过ASIHTTPRequest)的类,我们称之为PublicAPI。我所想要做的是编写直接从Web服务,像这样返回数据的方法......Objective-C和ASIHTTPRequest返回值

publicAPI = [[PublicAPI alloc] initWithAccountInfo:email:[self email] password:[self password]]; 
NSArray *theData = [publicAPI getData]; 

所以,getData需要启动ASIHTTPRequest 返回来自服务器的响应。问题是我想通过ASIHTTPRequest的startAsynchronous选项进行ASIHTTPRequest调用,该选项将服务器的响应委托给requestFinished方法。

如何使用requestFinished的结果作为getData方法的返回值?

感谢您的咨询!

回答

0

你的方法需要getData等到响应返回之前回来,这将使连接同步。这并不合理。

已经通过ASIHTTPRequest(和NSURLConnection)实现的委托模式是最好的方法。

如果你只是需要进行测试的同步连接,NSURLConnection的有一个类方法:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error 
+0

感谢您的意见,这是有道理的。那么,那么,习惯性的再次获取数据的方法是什么呢?也许'getData'只会启动请求(并且不会返回任何内容),然后我会使用NSNotification来告诉其他类数据已返回?谢谢! – 2011-04-19 04:18:12

+0

您可以使用具有成功/失败回调的委托。如果您需要立即通知多个班级,您可以播发通知。最好的方法是成功/失败。有一个食谱,在新iOS iOS食谱书(目前处于测试阶段)中包含阻止回调的NSURLConnection:http://pragprog.com/titles/cdirec/ios-recipes – gerry3 2011-04-19 19:05:12

+0

感谢您的提示。你提供的信息是令人兴奋的,我需要的。这篇文章也有帮助:http://css.dzone.com/articles/do-not-publishcreating-your – 2011-04-20 02:38:40

0

让你 [publicAPI的getData] 实际上是ASIHTTPRequest的子类。这将接收ASI委托的回调(成功,失败),并将处理(JSON,XML,CoreData等)您的传入数据。

在处理完数据之后,您可以使用任何类型的通知来将NSArray数据返回到您想要的位置。

如果您针对每个后端的API调用进行子类化,并使用通用的系统处理您的API中的每个API,则可以使后端与您的通信更加友好和轻松。