我通常編碼在NSFileWrapper
這樣我的數據未找到(我離開了NSFileWrapper位):重點在NSKeyedUnarchiver對象
-(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
(不是零),但[unarchiver decodeObjectForKey:@"data"]
將返回NIL。它看起來好像沒有對象,即使應該存在關鍵字「數據」。我想編碼時一定會出錯,但我不知道如何解決這個問題。我可以只取data
中的任何內容並對其進行編碼,而不必擔心它是否具有正確的密鑰?我的意思是應該只有一個關鍵的「數據」。
爲什麼你的代碼這麼複雜?爲什麼不只是'返回[NSKeyedArchiver archivedDataWithRootObject:o];'和'返回[NSKeyedUnarchiver unarchiveObjectWithData:data];'? – deanWombourne
@deanWombourne好問題。我對NSFileWrapper感到非常困惑,我遵循Apple的Examples和Wenderlich的教程......所以我猜我犯了一個盲目的錯誤,那就是我無法理解100%的錯誤代碼。我現在就試試這個,並且會讓你知道。也許把你的評論放在下面的答案中?謝謝! –
因爲我的評論並沒有真正回答你的問題 - 可能有你需要這種複雜性的原因。但是,因爲沒有,請參閱下面的答案:) – deanWombourne