1

特に、色とタグのプロパティを持つ「ノード」(下のヘッダー) の配列を保存しているという問題があります。- (void)saveDataToDiskWithPath:(NSURL*)path として保存すると、ログにこれらのプロパティが存在することが示されます。後で保存したファイルから配列を再度ロードすると、ノードのフレームは保持されますが、配列内の各ノードはタグと色を失います...理由はありますか? 私は何が間違っているのでしょうか?多分私はただ疲れているだけで、後ですべてが意味をなすでしょう...

Node.h:

//
//  Node.h
//

#import <Cocoa/Cocoa.h>


@interface Node : NSView {
@private
    NSColor *thisColor;
    NSColor *originalColor;
    NSRect dragRect;
    BOOL msDn;
    long tag;
    BOOL amSelected;
}

@property long tag;
@property (nonatomic, retain) NSColor* originalColor;

- (id)initWithFrame:(NSRect)frame andColor:(NSColor*)color;
- (void)select:(BOOL)yesOrNo;

@end

保存方法:

- (void) saveDataToDiskWithPath:(NSURL*)path
{
    NSLog(@"Path is %@", [path absoluteString]);
    NSMutableDictionary * rootObject;
    rootObject = [NSMutableDictionary dictionary];
    for(Node* node in [sharedValues nodes]){
        NSLog(@"Node has color %@ and tag %ld.", [node originalColor], [node tag]);
    }
    [rootObject setValue: [imageView aPath] forKey:@"path"];
    [rootObject setValue:[sharedValues nodes] forKey:@"nodes"];
    [NSKeyedArchiver archiveRootObject: rootObject toFile: [path path]];
}

ロード方法:

- (void)loadDataFromDiskWithPath:(NSURL*)path
{
    NSDictionary * rootObject;

    rootObject = [NSKeyedUnarchiver unarchiveObjectWithFile:[path path]];    
    [imageView setAPath:[rootObject valueForKey:@"path"]];
    [sharedValues setNodes:[rootObject valueForKey:@"nodes"]];
    [imageView setNeedsDisplay:YES];
}
4

1 に答える 1

2

オブジェクトを適切にアーカイブするには、NSCodingプロトコルと実装-initWithCoder:とメソッドを採用する必要があります。はそのプロトコルを採用するサブクラスである-encodeWithCoder:ため、その一部は正しくアーカイブされています。これらは UIView とその親クラスのプロパティです。適切なアーカイブを確保するために、ノードもプロトコルを実装する必要があります。詳細については、このドキュメントを参照してください。NodeUIView

于 2011-05-17T05:37:56.750 に答える