ios - 在 NSKeyedUnarchiver 对象中找不到 key

标签 ios nsdata nskeyedarchiver nscoding nsfilewrapper

我通常将数据编码在 NSFileWrapper 中,如下所示(我省略了 NSFileWrapper 位):

-(NSData*)encodeObject:(id<NSCoding>)o {
        @autoreleasepool {            
            NSMutableData *data = [NSMutableData data];
            NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
            [archiver encodeObject:o forKey:@"data"];
            [archiver finishEncoding];
            return data;
        }
    }

这样做时我通常会取回数据:

- (id)decodeObjectFromWrapperWithPreferredFilename:(NSString *)p {

    NSFileWrapper *wrapper = [self.fileWrapper.fileWrappers objectForKey:p];
    if (!wrapper) {
        NSLog(@"Unexpected error: Couldn't find %@ in file wrapper!", p);
        return nil;
    }

    NSData *data = [wrapper regularFileContents];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

    NSLog(@"%@", [unarchiver decodeObjectForKey:@"data"]);
    return [unarchiver decodeObjectForKey:@"data"];

}

有时,我会返回 NSData (它不是 nil),但 [unarchiverdecodeObjectForKey:@"data"] 将返回 NIL。看起来好像没有键@“data”的对象,尽管应该有。我猜编码时一定出了问题,但我不知道如何解决这个问题。我可以只获取 data 中的内容并对其进行编码,而不用担心它是否拥有正确的 key 吗?我的意思是应该只有一个关键“数据”。

最佳答案

为什么你的代码如此复杂:) NSKeyedArchiver 类具有辅助方法,可以更简单地完成你想要的事情:

// to turn an object into NSData
return [NSKeyedArchiver archivedDataWithRootObject:o]; 

// To turn NSData into your object again
return [NSKeyedUnarchiver unarchiveObjectWithData:data];

关于ios - 在 NSKeyedUnarchiver 对象中找不到 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12671758/

相关文章:

arrays - NSCoding - 保存父属性导致崩溃

ios - 使用 FMDB for SQLite 库如何像 Core Data 的 controllerDidChangeContent 一样自动更新 TableView

ios - AlamofireImage 下载到 CoreData

ios - swift NSKeyedArchiver : Do custom members of an NSCoding-conformant class need to conform to NSCoding as well?

ios - 第一次运行 MFMailCompose 时,保存到文档目录的 PDF 永远不会附加(数据为零),但每隔一次

ios - 从 NSData 字节获取浮点值

ios - 将数据存储在 NSUserdefaults 或 coredata 中?

iphone - 如何知道单元格的 ImageView 中是否有图像

ios - 从服务器在 map 上请求注释的简单算法

swift - Swift 中的 NSData appendBytes