标签: nskeyedarchiver

iOS 12.0 替代使用已弃用的 archiveRootObject:toFile:

在 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)

objective-c nskeyedarchiver ios12

20
推荐指数
4
解决办法
1万
查看次数

使用NSCoder对NSArray或NSDictionary进行编码

我想知道是否可以使用NSCoder方法:

- (void)encodeObject:(id)objv forKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)

编码NSArray或NSDictionary的实例.如果不是,你怎么去编码呢?我正在尝试使用NSKeyedArchived/NSKeyedUnarchiver使用GameKit在手机之间发送数据.我试过它,似乎无法检索我存储在我的数组中的字符串.我创建的数据包类与数据包类型整数一起出现,但不是数组中的数据.

提前致谢!

iphone nskeyedarchiver nsarray gamekit

18
推荐指数
3
解决办法
3万
查看次数

Swift结构化到NSData并返回

我有一个结构包含一个结构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成为一个对象,我宁愿保持它的结构.

干杯

serialization struct nskeyedarchiver nsdata swift

18
推荐指数
3
解决办法
2万
查看次数

NSKeyedUnarchiver - 删除解码数据?

我无法对我之前的(相关)问题做出任何回复,所以我想知道是否稍微解释它会有什么帮助.

我正在使用NSKeyedArchiver对一些复杂对象进行编码并将其保存到磁盘.说,像 -

Class member {
    int *id;
    NSString *name;
    NSMutableArray *array;
    TempClass *object;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建的功能是让用户能够保存他的工作,比如说,创建一个新成员并稍后再回来.当用户完成后,他点击发布,数据将被传输到Web服务.如果没有,他只需单击保存并离开屏幕并保持数据,以便应用程序可以在用户返回时从该点恢复.现在,一旦我将数据发布到Web服务,我不想再将数据保存在磁盘中了,我真的找不到删除它的方法.

现在,我的编码和解码类运行正常.我可以使用NSKeyedArchiver将数据保存到磁盘并使用NSKeyedUnarchiver检索它.但是,我的问题是,如何删除我不再需要的数据?我是否必须手动删除磁盘上的文件?有没有办法让NSKeyedUnarchiver删除它返回的数据?

谢谢,
Teja.

iphone nskeyedarchiver

16
推荐指数
3
解决办法
6086
查看次数

Swift中的简单持久存储

我有一个对象数组,每个对象都有许多属性.以下是循环遍历对象数组的一些示例数据:

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

15
推荐指数
2
解决办法
2万
查看次数

通过KeyChain保存并检索值

我正在尝试存储一个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)

keychain nskeyedarchiver ios swift

14
推荐指数
4
解决办法
1万
查看次数

无法解密类Employee的对象(NS.object.0); 该类可以在源代码中定义,也可以在未链接的库中定义

我试图通过序列化数组将一系列'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端进行任何更改才能修复此错误?

objective-c nskeyedarchiver ios nskeyedunarchiver watchkit

12
推荐指数
2
解决办法
5124
查看次数

如何解决unarchiveObject(withFile :)的弃用

在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)

nskeyedarchiver ios swift

11
推荐指数
3
解决办法
3146
查看次数

NSArchiver与NSKeyedArchiver

你怎么知道你是否需要使用NSArchiverNSKeyedArchiver?有什么不同?

cocoa-touch objective-c nskeyedarchiver ios

10
推荐指数
1
解决办法
2207
查看次数

我可以获得NSKeyedUnarchiver的所有密钥吗?

我想用这些步骤做点什么:

  1. 使用NSKeyedArchiver M对一种对象A进行编码,我可以获得NSData X.
  2. 用NSData X中的NSKeyedUnarchiver N初始化另一种对象B.A和B的名称是相同的,所以它是可能的(我做了一个实验).
  3. 然后我想编码B,但我不知道B会丢失一些X的数据,因为A和B可能有不同数量的属性.

所以我想从N获得所有的键和值.我怎么能这样做?

我不太了解NSKeyedUnarchiver,请帮助我.

key nskeyedarchiver nscoder

10
推荐指数
0
解决办法
928
查看次数