我将 s 包裹NSRect
在NSValue
s 中以将它们放入 NSMutableArray。我现在想为我的应用程序添加保存/加载功能,所以我想我会使用NSKeyedArchiver
and NSKeyedUnarchiver
。错误的! NSKeyedArchiver cannot archive structs
. 经过一番搜索,我找到了一个有同样问题的人的论坛帖子。他通过使用NSArchiver
and解决了这个问题NSUnarchiver
。我实现了这一点,但再一次,它没有用。我现在可以对其进行编码,但如果我解码我的数组,我会得到一个NSRect
s数组!您甚至不能将它们放入数组中!但我不在乎,只要我能恢复我的直肠。但我不能,因为NSArray
只有检索对象的方法。结构不是对象,所以我无法检索我的矩形。这怎么可能?如何检索我存档的矩形?
MyDocument.m 的一部分:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
NSMutableArray *array = odview.ovals;
return [NSArchiver archivedDataWithRootObject:array];
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
NSMutableArray *array = [NSUnarchiver unarchiveObjectWithData:data];
NSMutableArray *newOvals = [NSMutableArray array];
NSLog(@"array: %@", array);
NSUInteger i, count = [array count];
for (i = 0; i < count; i++) {
NSRect rect = [array objectAtIndex:i]; // I can't do that because a struct is not an object!
[newOvals addObject:[NSValue valueWithRect:rect]];
}
odview.ovals = newOvals;
return YES ;
}
包装 NSValues 怎么可能消失,我怎样才能安全地保存和加载我的 NSRects?