余分なプロパティとメソッドを追加したいので、UIImage(UIImageExtra)のサブクラスを作成しました。カスタムオブジェクトのNSArrayを保存する
私はこのカスタムクラスのインスタンスを含む配列を持っています。しかし、配列を保存すると、UIImageExtraクラスの余分なデータは保存されません。
UIImageExtraはNSCodingに準拠していますが、追加したNSLogステートメントは印刷されないため、initWithCoderもencodeWithCoderも呼び出されません。
配列を保存する私の方法は次のようになります。
- (void)saveIllustrations {
if (_illustrations == nil) {
NSLog(@"Nil array");
return;
}
[self createDataPath];
//Serialize the data and write to disk
NSString *illustrationsArrayPath = [_docPath stringByAppendingPathComponent:kIllustrationsFile];
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:_illustrations forKey:kIllustrationDataKey];
[archiver finishEncoding];
[data writeToFile:illustrationsArrayPath atomically: YES];
}
そしてUIImageExtraを保存するために、次のデリゲートメソッドがあります。
#pragma mark - NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder {
NSLog(@"Encoding origin data!");
[super encodeWithCoder:aCoder];
[aCoder encodeObject:originData forKey:kOriginData];
}
- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:(NSCoder *) aDecoder]) {
NSLog(@"Decoding origin data");
self.originData = [aDecoder decodeObjectForKey:kOriginData];
}
return self;
}
最初の場所のルックスに配列を作成するために私のコードこのように(手がかりを提供する場合)
for (NSDictionary *illustrationDict in illustrationDicts) {
NSString *illustrationString = [illustrationDict objectForKey:@"Filename"];
NSNumber *xCoord = [illustrationDict objectForKey:@"xCoord"];
NSNumber *yCoord = [illustrationDict objectForKey:@"yCoord"];
UIImageExtra *illustration = (UIImageExtra *)[UIImage imageNamed:illustrationString];
//Scale the illustration to size it for different devices
UIImageExtra *scaledIllustration = [illustration adjustForResolution];
NSValue *originData = [NSValue valueWithCGPoint:CGPointMake([xCoord intValue], [yCoord intValue])];
[scaledIllustration setOriginData:originData];
[self.illustrations addObject:scaledIllustration];
}
このデータを間違った方法で入力しますか?どうもありがとう。
+(UIImageExtra *)imageExtraWithUIImage:(UIImage *)image; UIImageの議論で私は何をしますか?私はallocとinitを使って新しいUIImageExtraオブジェクトを作成して返すと仮定していますが、UIImageを新たに割り当てられたUIImageExtraのプロパティとして設定する必要がありますか?どの場合、サブクラスにUIImageのインスタンスを定義する必要がありますか?サブクラスのプロパティとして親クラスのインスタンスを持つのは変ですか?または、何とか親クラスをUIImageのインスタンスに設定することはできますか? – Smikey