NSDictionnary の使用中に奇妙な問題が発生しています ...
メソッド objectForKey を使用して辞書に存在するキーのオブジェクトを取得しようとしていますが、代わりに nil が返されます。
辞書全体を印刷すると、探しているキーと値がはっきりとわかります。
コードは次のとおりです。
- (MObject *)GetWithMProperty:(MProperty *)prop {
NSLog(@"We search an object for a property named %@", prop.Name);
NSArray *keyArray = [_dict allKeys];
int count = [keyArray count];
for (int i=0; i < count; i++) {
MObject *tmp = [_dict objectForKey:[ keyArray objectAtIndex:i]];
NSLog(@"Key = %@ | Object = %d", ((MProperty*)[keyArray objectAtIndex:i]).Name, tmp.GetTypeId);
if (prop == [keyArray objectAtIndex:i])
NSLog(@"Wouhou !");
else
NSLog(@"Too bad :(");
}
return [_dict objectForKey:prop];
}
そしてスタックトレース:
2012-10-29 11:24:07.730 IOS6[1451:11303] We search an object for a property named Value
2012-10-29 11:24:07.730 IOS6[1451:11303] Key = Name | Object = 4
2012-10-29 11:24:07.731 IOS6[1451:11303] Too bad :(
2012-10-29 11:24:07.731 IOS6[1451:11303] Key = Value | Object = 0
2012-10-29 11:24:07.732 IOS6[1451:11303] Too bad :(
少し複雑です。J2ObjC を使用して完全に機能するエンジンをコンパイルしているため、クラス MProperty および MObject (エンジンによって使用される) を変更できません。
MProperty は NSCopying プロトコルに準拠していないため、MProperty を継承してプロトコルに準拠する IPhoneMProperty というクラスを作成しました。
これがこのクラスです:
@implementation IPhoneMProperty
- (id)initWithMProperty:(MProperty *)prop {
self = [super initWithInt:prop.OwnerTypeId withNSString:prop.Name withInt:prop.TypeId withMBasicValue:prop.DefaultValue withInt:prop.Flags];
return self;
}
- (id)copyWithZone:(NSZone *)zone {
IPhoneMProperty *prop = [[IPhoneMProperty alloc] initWithMProperty:self];
return prop;
}
@end
そして、辞書にオブジェクトとキーを追加するために使用する方法:
- (void)SetWithMProperty:(MProperty *)prop withMObject:(MObject *)obj {
IPhoneMProperty *tempKey = [[IPhoneMProperty alloc] initWithMProperty:prop];
[_dict setObject:obj forKey:tempKey];
}
私はそれが十分に明確であることを願っています.実際には、それが現時点で見つけた唯一の解決策ですが、うまくいきません:(
誰でもこれで私を助けることができますか?
ありがとう !