5

--更新:我决定试试 AFNetworking。尽管 RestKit 有一个非常好的对象映射功能,但网络调用的设计方式让我们有些困难。

我希望就如何组织使用 RestKit 的项目获得一些建议。

我有几个来自存储库类的 REST 调用,其结果被传递给控制器​​。例如,我在从浏览视图控制器调用的存储库类中有一个 getProfile 方法。视图控制器被设置为 get profile 调用的委托,而存储库类被设置为 restkit 调用的委托。

问题是,如果浏览控制器发出多个获取配置文件请求,则很难区分哪个结果应该发送到哪个委托函数,因为所有 restkit 调用共享相同的委托方法 objectLoaderDidFinishLoading。然后我有 4 个委托,我必须匹配 4 个异步 restkit 请求的结果。

有什么方法可以使用块,以便我可以传递一个函数以在 asnynrhounous 结果返回时执行,以便我可以分配一个适当的委托?我看到的块支持允许在请求被发送到 rest kit 之前使用块,但我有兴趣在返回异步结果时使用它。

检查结果或设置用户数据并侦查委托与异步结果的替代方法似乎不可靠且笨重。

4

4 回答 4

4

您可以通过使用 RKObjectLoader 上的 userData 不透明指针来解决您的配置文件请求之间的歧义消除问题。这将允许您在请求上挂起您想要的任何对象,然后可以用来帮助区分多个配置文件请求。此外,如果这些配置文件请求将发送到不同的资源路径,那么您可以使用 RKObjectLoader 上的 wasSentToResourcePath: 方法来区分它们。

于 2011-10-28T13:29:44.647 回答
0

我只是在试图为我自己的 REST 接口找出这个问题时偶然发现了这个问题。我很高兴我做到了,我现在可能会使用 RestKit。

我跑题了,回到你的问题。正如您所指出的,RKObjectManager 中的 block 参数似乎并不是要以这种方式使用。相反,如何编写一个实现 RKObjectLoaderDelegate 的类,接收一个块,并在任何委托调用上调用该块。

也许是这样的?

@interface MyObjectLoaderDelegate : NSObject <RKObjectLoaderDelegate>

@property (nonatomic, copy) void (^callback)(RKObjectLoader *loader, NSDictionary *objectDictionary, NSError *error)

- (id)initWithCallback:(void (^)(RKObjectLoader*, NSDictionary*, NSError*)aCallaback;

@end

在任何已实现的委托方法上,您都可以执行该块。由于块保留范围变量,因此您可以针对调用委托运行代码。

怎么想?

于 2011-10-26T19:54:57.513 回答
0

我不确定使用块是否是解决问题的正确方法。

拥有一个实现 RKObjectLoaderDelegate 的类 GetProfile 怎么样。因此,您从这里调用请求并将自己设置为委托。然后每个请求都有一个 objectLoader。

因此,在您的视图控制器中,每次您使用 GetProfile 时,您都会创建一个实例。然后当该实例向您的控制器发送消息时(通过委托?)您知道它是哪个。

我也在努力解决这个问题,所以很想听到反馈。

于 2011-10-28T08:02:32.720 回答
0

切换到 AFNetworking 似乎是要走的路……对于我需要的东西来说,这是一个更容易实现的方法。

于 2011-12-21T14:50:03.850 回答