私はクラッシュログNSObjectをBOOLプロパティに設定するときに例外が発生することはありますか?
-[__NSCFConstantString charValue]: unrecognized selector sent to instance 0x8224d0
を受けるので、私は、コードをチェックし、それが
[self setValue:value forKeyPath:key];
によって引き起こされます見つけるが、私は手動でBOOLプロパティにNSStringのを設定したとき、私はこのクラッシュを再び現れることはできません。
本当にクラッシュするのですか?
プロパティを設定する前にタイプをチェックしますが、この問題が修正されたかどうかはわかりません。
-(instancetype)initWithDic:(NSDictionary *)dic
{
self = [super init];
if(self)
{
if(![dic isKindOfClass:[NSDictionary class]])
return self;
//now I do sth,funtion "propertyOfClass" will not return the BOOL-type properties
NSArray *properties = [Utils propertyOfClass:[self class]];
for(NSString *key in properties)
{
NSString *value = GET_STRING(dic[key]);
if (![value isEqualToString:@""]) {
[self setValue:value forKeyPath:key];
}
}
}
return self;
}
そして今、私はコード
@interface ClassA : NSObject
@property (nonatomic, assign) BOOL propertyA;
@end
ClassA *a = [ClassA new];
[a setValue:@"xx" forKey:@"propertyA"];
[a setValue:@"" forKeyPath:@"propertyA"];
これは非常に混乱しやすい質問ですが、実際のクラッシュです。はい、また再び発生します。 – trojanfoe