Я столкнулся с той же проблемой в Xcode 4.1 с поддержкой ARC:
BOOL isFileExist = [[NSFileManager defaultManager] fileExistsAtPath:filePath];
NSAssert(isFileExist, @"filePath does not exist");
NSKeyedUnarchiver* coder =
[NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; // nil
NSData* data = [[NSFileManager defaultManager] contentsAtPath:filePath];
coder = [NSKeyedUnarchiver unarchiveObjectWithData:data]; // nil
coder = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; // OK!!!
Кажется, это ошибка в touch-какао.
Edit:
Он предназначен для такого поведения и не является ошибкой. Но я согласен, что присвоение имен легко приводит к ошибкам.
[[NSKeyedUnarchiver alloc] initForReadingWithData:]
возвращает экземпляр NSKeyedUnarchiver
.
[NSKeyedUnarchiver unarchiveObjectWithData:]
возвращает корневой объект. Это удобный метод для:
NSKeyedUnarchiver *coder = [[self alloc] initForReadingWithData:arg2];
id object = [coder decodeObjectForKey:@"root"];