在 iOS 12 中,archiveRootObject:toFile:已弃用。任何人都可以建议将对象归档到文件的简化替代方案吗?
//Generic example of archiver prior to iOS 12.0
-(BOOL) archive:(id)archiveObject withFileName:(NSString*)filename
{
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
return [NSKeyedArchiver archiveRootObject:archiveObject toFile:path];
}
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用NSCoder方法:
- (void)encodeObject:(id)objv forKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)
编码NSArray或NSDictionary的实例.如果不是,你怎么去编码呢?我正在尝试使用NSKeyedArchived/NSKeyedUnarchiver使用GameKit在手机之间发送数据.我试过它,似乎无法检索我存储在我的数组中的字符串.我创建的数据包类与数据包类型整数一起出现,但不是数组中的数据.
提前致谢!
我有一个结构包含一个结构NSObject,我想序列化到一个NSData对象:
struct Packet {
var name: String
var index: Int
var numberOfPackets: Int
var data: NSData
}
var thePacket = Packet(name: name, index: i, numberOfPackets: numberOfPackets, data: packetData)
Run Code Online (Sandbox Code Playgroud)
我如何最好地将数据包序列化为一个NSData,以及如何最好地将其反序列化?
运用
var bufferData = NSData(bytes: & thePacket, length: sizeof(Packet))
Run Code Online (Sandbox Code Playgroud)
只给了我名字和数据的指针.我正在探索NSKeyedArchiver,但后来我必须使Packet成为一个对象,我宁愿保持它的结构.
干杯
聂
我无法对我之前的(相关)问题做出任何回复,所以我想知道是否稍微解释它会有什么帮助.
我正在使用NSKeyedArchiver对一些复杂对象进行编码并将其保存到磁盘.说,像 -
Class member {
int *id;
NSString *name;
NSMutableArray *array;
TempClass *object;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建的功能是让用户能够保存他的工作,比如说,创建一个新成员并稍后再回来.当用户完成后,他点击发布,数据将被传输到Web服务.如果没有,他只需单击保存并离开屏幕并保持数据,以便应用程序可以在用户返回时从该点恢复.现在,一旦我将数据发布到Web服务,我不想再将数据保存在磁盘中了,我真的找不到删除它的方法.
现在,我的编码和解码类运行正常.我可以使用NSKeyedArchiver将数据保存到磁盘并使用NSKeyedUnarchiver检索它.但是,我的问题是,如何删除我不再需要的数据?我是否必须手动删除磁盘上的文件?有没有办法让NSKeyedUnarchiver删除它返回的数据?
谢谢,
Teja.
我有一个对象数组,每个对象都有许多属性.以下是循环遍历对象数组的一些示例数据:
Name = Rent
Default Value 750
This Months Estimate = 750
Sum Of This Months Actuals = 0
Risk Factor = 0.0
Monthly Average = 750.0
--------------
Name = Bills
Default Value 250
This Months Estimate = 170
Sum Of This Months Actuals = 140
Risk Factor = 0.0
Monthly Average = 190.0
--------------
Name = Food
Default Value 240
This Months Estimate = 200
Sum Of This Months Actuals = 95
Risk Factor = 0.0
Monthly Average = …Run Code Online (Sandbox Code Playgroud) arrays persistent-storage nsuserdefaults nskeyedarchiver swift
我正在尝试存储一个Integer并使用KeyChain检索它.
这是我保存它的方式:
func SaveNumberOfImagesTaken()
{
let key = "IMAGE_TAKEN"
var taken = 10
let data = NSKeyedArchiver.archivedDataWithRootObject(taken)
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecValueData as String : data
]
let status : OSStatus = SecItemAdd(query as CFDictionaryRef, nil)
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试检索它的方式:
func CheckIfKeyChainValueExitss() -> AnyObject? {
var key = "IMAGE_TAKEN"
let query : [String:AnyObject] = [
kSecClass as String : kSecClassGenericPassword,
kSecAttrAccount as String : key,
kSecReturnData as String : kCFBooleanTrue, …Run Code Online (Sandbox Code Playgroud) 我试图通过序列化数组将一系列'Employee'对象iPhone传递给Apple Watch:
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:employees];
Run Code Online (Sandbox Code Playgroud)
并在Watch侧进行反序列化:
NSMutableArray *employees = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
Run Code Online (Sandbox Code Playgroud)
这是'员工'类:
@interface Employee : NSManagedObject
@property (nonatomic, retain) NSNumber * employeeID;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * age;
@property (nonatomic, retain) NSString * address;
@property (nonatomic, retain) NSString * designation;
@property (nonatomic, retain) NSString * teamName;
@property (nonatomic, retain) NSString * gender;
@property (nonatomic, retain) NSNumber * dateOfJoining;
@end
Run Code Online (Sandbox Code Playgroud)
我是否必须在Watch端进行任何更改才能修复此错误?
在iOS 12.1中unarchiveObject(withFile:)已弃用。
如何转换NSKeyedUnarchiver.unarchiveObject(withFile: String)为使用对NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data: Data)或的调用NSKeyedUnarchiver.unarchivedObject(ofClasses: [AnyClass]:数据)或NSKeyedUnarchiver.unarchivedObject(ofClass: NSCoding.Protocol, from: Data)?
我猜您必须拥有类似的东西let fileData = try Data(contentsOf: URL),然后使用这些方法之一来取消存档数据。但是,我无法弄清楚,折旧随附的文档没有帮助(至少对我而言)。
存档的数据非常简单-只是一个字符串数组NameToBeSaved(此代码定义的类数组):
class NameToBeSaved: NSObject, NSCoding {
var name: String
init(userEnteredName: String) {
self.name = userEnteredName
super.init()
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
super.init()
}
Run Code Online (Sandbox Code Playgroud)
这是调用unarchiveObject(withFile :)的代码-
init() {
if let archivedCategoryNames = NSKeyedUnarchiver.unarchiveObject(withFile: categoryNameArchiveURL.path) as? [NameToBeSaved] …Run Code Online (Sandbox Code Playgroud) 你怎么知道你是否需要使用NSArchiver或NSKeyedArchiver?有什么不同?
我想用这些步骤做点什么:
所以我想从N获得所有的键和值.我怎么能这样做?
我不太了解NSKeyedUnarchiver,请帮助我.