我们可以将NSURLRequest直接存储到Core Data中吗?

时间:2017-01-12 10:21:48

标签: ios objective-c ipad core-data

我正在开发iPad应用程序,我需要创建多个NSURLRequest。 什么时候失败,我需要再次触发该URL请求。

我有三种类型(创建学校,创建楼层和创建房间)的请求,其中包含多个参数不同的创建请求。

当有第一个请求创建的相同对象的互联网可用时,可以触发重试方法。

所以我试图创建三个表,我试图将所有参数存储在其状态中。

是否可以使用NSURLRequest创建单表而不管CREATE REQUEST?

4 个答案:

答案 0 :(得分:2)

所以我提出了自己的想法,我与所有人分享。

根据我的阅读和谷歌搜索,我无法将NSURLRequest存储到核心数据中。因为我不知道对象的类型。

我将使用列PARAMS,METHODS,URL

创建核心数据表

所以我可以创建包含PARAMS(Dict),方法(PUT,GET等),URL列的Table。

我将做什么,我可以将DICT参数转换为NSKeyedArchiver并将其保存到PARAM列中。 URL和方法在单独的列中。

当我需要保存请求时,我可以从表中获取它并发送到服务器。

答案 1 :(得分:1)

核心数据实体对应NSManagedObject的实例或NSManagedObject的子类,因此您不能直接保存URL请求。你可以做的是创建一个名为SavedRequest的实体,它有一个代表URL请求的属性 - 可能还有一些关于请求的其他细节(你可能需要的其他信息 - 日期,也许?)。 / p>

由于NSURLRequest符合NSCoding,您可以使用Core Data“transformable”类型创建此属性。核心数据将根据需要使用NSCoding自动转换为NSData。您可以为该属性分配NSURLRequest并将其读回,Core Data会将其保存为NSData

考虑到你的描述,核心数据可能没有意义。听起来您只想保存一个URL请求列表,然后再将其读回,并且不需要Core Data提供的额外功能。将NSURLRequest对象放入数组中然后将该数组保存到文件或用户默认值会更简单。您可以自己转换为NSData,但由于您可以轻松使用NSCoding

要保存数组,你应该这样做,假设一个名为myArray的数组包含URL请求和filePath中的路径:

BOOL success = [NSKeyedArchiver archiveRootObject:myArray toFile:filePath];

你将使用

恢复数组
NSArray *savedRequests = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

答案 2 :(得分:0)

您可以保存NSURLRequest的n属性的absoluteString。或者他们每个人都有不同的超时或缓存政策?

答案 3 :(得分:0)

是的,这是可能的,至少对Swift而言。使用Swift,您可以访问CoreData中的Transformable属性。使用此属性可以在Core Data中放置任何类型的数据。这甚至没有额外的开销。

请参阅优秀教程http://geekyviney.blogspot.nl/2015/02/transformable-binary-data-properties-in.html