我正在开发iPad应用程序,需要在其中创建多个NSURLRequest。当它失败时,我需要再次启动该URL请求。
我有三种类型的请求(创建学校、创建楼层和创建房间),其中包含多个参数不同的创建请求。
有一种重审方法,当有互联网可用时,可以启动第一次请求创建的相同对象。
所以我试图创建三个表,并试图存储所有参数及其状态。
是否可以使用NSURLRequest创建单个表,而不考虑create REQUEST?
所以我提出了自己的想法,并与大家分享。
根据我的阅读和谷歌搜索,我无法将NSURLRequest存储到核心数据中。因为我不知道物体的类型。
我将创建核心数据表与列PARAMS,方法,URL
所以我可以创建一个表,它将包含PARAMS(Dict)、Methods(PUT、GET等)、URL列。
我将要做的是,我可以将DICT参数转换为NSKeyedArchiver,并将其保存到PARAM列中。URL和METHODS在单独的列中。
当我需要保存请求时,我可以从表中获取并发送到服务器。
核心数据实体对应于NSManagedObject
的实例或NSManagedObject
的子类,因此不能直接保存URL请求。你可以做的是创建一个名为SavedRequest
的实体,它有一个表示URL请求的属性——也许还有关于请求的其他一些细节(你可能需要的任何其他信息——也许是日期?)。
由于NSURLRequest
符合NSCoding
,因此您将使用核心数据"可转换"类型创建此属性。核心数据将使用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];
您可能只需要保存NSURLRequest的URL
属性的absoluteString
。还是它们都有不同的超时或缓存策略?
是的,这是可能的,至少在Swift中是这样。使用Swift,您可以访问CoreData中的Transformable属性。使用此属性可以将任何类型的数据放入核心数据中。即使没有额外的开销。
查看优秀教程http://geekyviney.blogspot.nl/2015/02/transformable-binary-data-properties-in.html