我将NSRect
s包装在NSValue
s中,以将它们放入NSMutableArray中。我现在想为我的应用程序添加保存/加载功能,所以我想我会使用 NSKeyedArchiver
和 NSKeyedUnarchiver
.错! NSKeyedArchiver cannot archive structs
.经过一番搜索,我找到了有相同问题的人的论坛帖子。他通过使用NSArchiver
和NSUnarchiver
解决了它。我实现了它,但再次,它不起作用。我现在可以对它进行编码,但是如果我解码我的数组,我会得到一个NSRect
数组!你甚至不能把它们放进一个数组中!但我不在乎,只要我能把我的直肠找回来。但我不能,因为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 如何可能消失,如何安全地保存和加载我的 NSRect?
我认为最简单的方法是使用NSStringFromCGRect和CGRectFromString来回转换 - 将矩形存储为数组中的字符串,然后只使用writeToFile:atomally:(或writeToURL:atomally:)以保存阵列。