0

我将 s 包裹NSRectNSValues 中以将它们放入 NSMutableArray。我现在想为我的应用程序添加保存/加载功能,所以我想我会使用NSKeyedArchiverand NSKeyedUnarchiver错误的! NSKeyedArchiver cannot archive structs. 经过一番搜索,我找到了一个有同样问题的人的论坛帖子。他通过使用NSArchiverand解决了这个问题NSUnarchiver。我实现了这一点,但再一次,它没有用。我现在可以对其进行编码,但如果我解码我的数组,我会得到一个NSRects数组!您甚至不能将它们放入数组中!但我不在乎,只要我能恢复我的直肠。但我不能,因为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?

4

1 回答 1

0

我认为最简单的方法是使用 NSStringFromCGRect 和 CGRectFromString 来回转换——将矩形存储为数组中的字符串,然后使用 writeToFile:atomically: (或 writeToURL:atomically:) 来保存数组。

于 2013-01-30T17:31:23.007 回答