我是一位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"];
这是怎么回事?
谢谢
最佳答案
在你的+loadForKey:
中
NSMutableData *bytes = [NSMutableData data];
NSKeyedUnarchiver *unrar = [[NSKeyedUnarchiver alloc] initForReadingWithData:bytes];
您正在尝试从空数据对象读取。使用
[NSMutableData data]
创建可变数据对象只会为您提供一个不包含任何内容的对象。您需要从某处读取数据。同样,在+saveObject:forKey:
中,您成功地归档了对象,但是对结果数据对象不做任何事情。要解决此问题,您需要使用保存方法将数据写入文件或URL,并通过加载方法从文件或URL中读取数据。
关于java - objective-c :序列化/归档问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7588155/