0

I am trying to make a document-based application where it needs to decode the content using NSKeyedUnarchiver. However, it failed to extract the information even though there is indeed data containing!

The following is my code, and also the debugging information! Please help! Thank you!

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

NSData* data = [fileWrapper regularFileContents];
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
NSLog(@"contains %@? %@",preferredFilename,[unarchiver containsValueForKey:@"data"]?@"Yes":@"No");

NSString* decodedData = (NSString*)[unarchiver decodeObjectForKey:@"data"];
NSLog(@"Data For %@ Found %@",preferredFilename,decodedData);
return decodedData;
}


2013-12-10 15:57:27.802  contains note.data? Yes
2013-12-10 15:57:27.807  Data 1
2013-12-10 15:57:27.807  Data For note.data Found *nil description*

EDIT: This is how I encode my data.

- (void)encodeObject:(id<NSCoding>)object toWrappers:(NSMutableDictionary *)wrappers preferredFilename:(NSString *)preferredFilename{
NSMutableData* m_data = [NSMutableData data];
NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:m_data];
[archiver encodeObject:object forKey:@"data"];
[archiver finishEncoding];
NSFileWrapper* wrapper =[[NSFileWrapper alloc]initRegularFileWithContents:m_data];
[wrappers setObject:wrapper forKey:preferredFilename];
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
donkey
  • 4,285
  • 7
  • 42
  • 68
  • Have you tried [NSKeyedUnarchiver unarchiveObjectWithData:<#(NSData *)#>]. I always use that method, and I have never experienced any problems. – Daan Lemmen Dec 10 '13 at 16:32
  • Will it give all the data from the file? Because in my file, there is also version information? – donkey Dec 10 '13 at 16:40

0 Answers0