NSRect
sをsでラップNSValue
して、NSMutableArrayに入れました。NSKeyedArchiver
アプリに保存/読み込み機能を追加したいので、とを使用すると思いNSKeyedUnarchiver
ました。間違い! NSKeyedArchiver cannot archive structs
。少し検索した後、同じ問題を抱えている人からのフォーラム投稿を見つけました。NSArchiver
彼はとを使用してそれを解決しましたNSUnarchiver
。私はそれを実装しましたが、もう一度、それは機能しませんでした。これでエンコードできますが、配列をデコードすると、NSRect
sの配列が返されます。それらを配列に入れることさえできません!しかし、私は自分の直腸を取り戻すことができる限り、気にしません。しかしNSArray
、オブジェクトを取得するためのメソッドしかないため、できません。構造体はオブジェクトではないため、rectを取得できません。これはどのように可能ですか?アーカイブされたrectを取得するにはどうすればよいですか?
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 ;
}
ラップしているNSValueが消える可能性はありますか?また、NSRectを安全に保存およびロードするにはどうすればよいですか?