目标 c - 解压缩我的阵列后,它突然包含 NSRects 而不是 NSValues.如何检索,



我将NSRect s包装在NSValue s中,以将它们放入NSMutableArray中。我现在想为我的应用程序添加保存/加载功能,所以我想我会使用 NSKeyedArchiverNSKeyedUnarchiver .错! NSKeyedArchiver cannot archive structs .经过一番搜索,我找到了有相同问题的人的论坛帖子。他通过使用NSArchiverNSUnarchiver解决了它。我实现了它,但再次,它不起作用。我现在可以对它进行编码,但是如果我解码我的数组,我会得到一个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:)以保存阵列。

最新更新