gpt4 book ai didi

iphone - Obj-C 类发出异步请求

转载 作者:行者123 更新时间:2023-12-03 20:32:32 27 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,我需要在其中使用 Facebook 的 FQL 来加载用户的通知。由于我需要在应用程序中的不同位置加载这些通知,因此我想创建 NSObject 的子类来加载这些通知并将其作为数组返回。我知道我应该创建一个子类(NotificationLoader),然后我可以调用其中的方法,例如startLoading: 在理想的情况下,此方法只会返回一个数组,但它不能,因为通知应该异步加载。我还必须考虑到异步请求可能会在 connection:didFailWithError:

中返回错误

任何人都可以给我一个提示或示例,说明如何创建一个异步加载并返回结果的类吗?我想这个类应该这样调用:

NotificationLoader *notificationLoader = [NotificationLoader alloc] init];
NSArray *notifications = [notificationLoader startLoading];

不过,我不确定这是最好的方法。

最佳答案

如果您希望它是异步的,您应该使用 delegation pattern 。定义一个需要由调用NotificationLoader的类实现的协议(protocol),当调用startLoading时,该方法应该启动一个单独的线程(或使用NSURL来启动异步调用)并异步加载所有内容。完成后,它将调用委托(delegate)上的“finishedLoadingResults:(NSArray*)results”方法(在协议(protocol)中声明)或“didFailWithError”

所以你只需调用

 -(void) someMethod{
NotificationLoader *notificationLoader = [NotificationLoader alloc] init];
notificationLoader.delegate = self;
[notificationLoader startLoading];
}

-(void) notificationLoaderDidLoadResults:(NSArray*) results
{
// This is the place where you get your results.
}

-(void) notificationLoaderDidFailWithError:....
{
// or there was an error...
}

NotificationLoader 示例:

 @protocol NotificationLoaderDelegate;
@interface NotificationLoader : NSObject
@property(nonatomic,retain) id<NotificationLoader> delegate;
-(void) startLoading;
@end

// Define the methods for your delegate:
@protocol NotificationLoaderDelegate <NSObject>

-(void) notificationLoader:(NotificationLoader*) notifloader didFinishWithResults:(NSArray*) results;
-(void) notificationLoader:(NotificationLoader*) notifloader didFailWithError;

@end

通知加载器的实现

 @implementation NotificationLoader
@synthesize delegate;

-(void) startLoading{
NSArray * myResults = ....;
// Call delegate:
[delegate notificationLoader:self didFinishWithResults: myResults];
}

关于iphone - Obj-C 类发出异步请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201708/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com