Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我可以在restkit的异步结果中使用块吗?_Objective C_Asynchronous_Objective C Blocks_Restkit - Fatal编程技术网

Objective c 我可以在restkit的异步结果中使用块吗?

Objective c 我可以在restkit的异步结果中使用块吗?,objective-c,asynchronous,objective-c-blocks,restkit,Objective C,Asynchronous,Objective C Blocks,Restkit,--最新消息:我决定试试看。尽管RestKit有一个非常好的对象映射功能,但是网络调用的设计方式给我们带来了一些困难 我希望得到一些关于如何组织使用RestKit的项目的建议 我有几个来自存储库类的REST调用,其结果被传递给控制器。例如,我在repository类中有一个getProfile方法,该方法将从浏览视图控制器中调用。视图控制器设置为get profile调用的委托,而存储库类设置为restkit调用的委托 问题是,如果浏览控制器发出多个get profile请求,则很难区分哪个结果

--最新消息:我决定试试看。尽管RestKit有一个非常好的对象映射功能,但是网络调用的设计方式给我们带来了一些困难

我希望得到一些关于如何组织使用RestKit的项目的建议

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

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

是否有任何方法可以使用块,以便在asnynhounous结果返回时传递要执行的函数,以便分配适当的委托?我看到的块支持允许在rest工具包中发送请求之前使用块,但我感兴趣的是在异步结果返回时使用它


检查结果或设置用户数据并搜索委托的替代方案,以及异步结果似乎不可靠且庞大的情况。

我在尝试为自己的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
@接口MyObjectLoaderDelegate:NSObject
@属性(非原子,副本)无效(^callback)(RKObjectLoader*loader,NSDictionary*objectDictionary,NSError*error)
-(id)initWithCallback:(void(^)(RKObjectLoader*、NSDictionary*、NSError*)acallack;
@结束
在任何实现的委托方法上,您都可以执行该块。由于块保留作用域变量,您可以针对调用的委托运行代码


你怎么想?

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

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

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


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

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

切换到AFNetworking似乎是一种可行的方法……对于我所需的,这是一种更容易实现的方法。

您看到了吗?嗨,科林,看起来很有趣sting,但我们已经在RestKit上投入了大量的工作,并且正在使用它的对象映射。嗨,科林,我很好奇,AFNetworking支持json到对象映射吗?我相信它支持,因为它依赖于RestKit。如果不支持,那你自己就不难实现了;有很多库可以实现这一点。有趣的方法,我不支持ried出了它的一个版本,但遇到了一个错误,因为我没有对MyObjectLoaderDelegate的强引用。我的repo类基本上有一个objectloaderdelegate工厂,我使用它设置为rest kit调用的委托。不幸的是,restkit没有保留对委托的引用,自定义加载程序委托不再是refere我一直在努力维护存储库中的一组块,所以我可能会沿着这条路径工作。我不想使用userData,因为它们基本上包含相同的信息,例如,如果我从4个不同的源调用同一个概要文件的getProfile,它们都将具有相同的用户数据。通过跟踪哪些用户数据去了哪里,有一些可行的解决方法,但它似乎很庞大。对于类似的rest kit请求,有很多switch和if-else语句。嗯,如果您将userData与源关联,userData将不会有相同的数据,这就是@jeffarena的目的。将UUID作为userData存储在RKObjectLoader和我们中将相同的UUID作为一个字典键,其值是源。这样可以很容易地消除响应的歧义。我对前面的一个建议做了类似的评论,但似乎对objectlaoderdelegate类的弱引用意味着,当restkit调用返回并调用委托时,委托引用就消失了。RestKit不保留对委托的引用,这意味着我必须在我的回购协议或其他类别中保留对自定义委托的引用…可行但非常庞大,我个人认为,我不认为有人问关于RestKit的问题是出于善意,人们尽了最大努力回答,最终正确答案被标记为“切换到AF网络”。提出SO问题的全部目的是让社区在技术问题上提供帮助?但问题是是否可以使用块,答案是否定的。在任何情况下都无法维护使用userdata进行消隐