【发布时间】:2011-09-28 18:59:52
【问题描述】:
我是一名 Android 开发人员,最近开始使用 IOSing。在我所有的 Android 项目中,我都有一个执行以下操作的 IO 类:
public static Object load(String fname , Context cont)
{
FileInputStream fis = cont.openFileInput(fname);
ObjectInputStream ois = new ObjectInputStream(fis);
Object loadedObject = ois.readObject();
ois.close();
fis.close();
Father.print("Loaded from file "+fname+" successfully");
return loadedObject;
}
和保存的等价物。它工作得很好,我可以用它加载和保存任何实例。
在 Objective C 中,我使用的是 NSKeyedArchiver/NSKeyedUnarchiver。存档似乎有效,但取消存档会导致:
*** -[NSKeyedUnarchiver initForReadingWithData:]: data is empty; did you forget to send -finishEncoding to the NSKeyedArchiver?
我正在使用以下静态方法:
+(BOOL)saveObject: (id<NSCoding>)obj forKey:(NSString*)key;
{
NSKeyedArchiver *archiver;
NSMutableData *bytes = [NSMutableData data];
archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:bytes];
[archiver encodeObject:obj forKey:key];
[archiver finishEncoding];
NSLog(@"Successfully saved object <%@> to %@", obj, key);
return TRUE;
}
和
+(id)loadForKey:(NSString*)key
{
NSMutableData *bytes = [NSMutableData data];
NSKeyedUnarchiver *unrar = [[NSKeyedUnarchiver alloc] initForReadingWithData:bytes];
id result = [unrar decodeObjectForKey:key];
[unrar finishDecoding];
NSLog(@"Successfully loaded object <%@>", result);
return result;
}
我这样称呼他们
[IVIO saveObject:thing forKey:@"thekey"];
Thing *miracle = [IVIO loadForKey:@"thekey"];
发生了什么事?
谢谢
【问题讨论】:
标签: java objective-c ios serialization archive