我的方法如下:
+ (PlayListModel *)transferToPlayListModelWithModel:(HomeLooperInfoDataResponseModel *)model{
PlayListModel * listModel = [PlayListModel new];
listModel.isDaily = NO;
listModel.idField = model.idField;
listModel.title = model.title;
listModel.url = model.url;
listModel.type = model.type;
listModel.pictureUrl = model.pictureUrlBig;
listModel.price = model.price;
listModel.discount_price = model.discount_price;
listModel.live_count = model.live_count;
listModel.webViewIntroURL = model.live_url;
listModel.isCost = model.isCost;
listModel.is_live = model.is_live;
listModel.live_end_time = model.live_end_time;
listModel.live_start_time = model.live_start_time;
listModel.is_recording = model.is_recording;
return listModel;
}
非常简单,我在这里调用它:
PlayListModel *model = [PlayListModel transferToPlayListModelWithModel:currentModel];
NSLog(@"%@",model);
而且,它显示了同一个对象model
具有不同的内容:
我希望属性isDaily不是,但它返回了一个让我很困惑的。我写了
listModel.isDaily = NO
。不知道哪里出了问题。
P.S。这是我的描述方法:
- (NSString *)description{
unsigned int count;
const char *clasName = object_getClassName(self);
NSMutableString *string = [NSMutableString stringWithFormat:@"<%s: %p>:[ \n",clasName, self];
Class clas = NSClassFromString([NSString stringWithCString:clasName encoding:NSUTF8StringEncoding]);
Ivar *ivars = class_copyIvarList(clas, &count);
for (int i = 0; i < count; i++) {
@autoreleasepool {
Ivar ivar = ivars[i];
const char *name = ivar_getName(ivar);
NSString *type = [NSString stringWithCString:ivar_getTypeEncoding(ivar) encoding:NSUTF8StringEncoding];
NSString *key = [NSString stringWithCString:name encoding:NSUTF8StringEncoding];
id value = [self valueForKey:key];
if ([type isEqualToString:@"B"]) {
value = (value == 0 ? @"NO" : @"YES");
}
[string appendFormat:@"\t%@: %@\n",[self delLine:key], value];
}
}
[string appendFormat:@"]"];
return string;
}
答案 0 :(得分:1)
左下角的输出是正确的值。
试试这个NSLog(@"%@", model.isDaily)
即可看到结果。
右下角的输出基于在当前类或父类中实现的方法-(void)description
,可能在此方法中更改属性isDaily
;
答案 1 :(得分:0)
问题在于-description
方法的这些行:
id value = [self valueForKey:key];
if ([type isEqualToString:@"B"]) {
value = (value == 0 ? @"NO" : @"YES");
}
value
永远不会等于0.对于布尔属性,它将是包装属性的标量值的NSNumber
对象。键值编码始终处理对象,而不是直接处理标量。
您可以通过将代码更改为:
来解决此问题 id value = [self valueForKey:key];
if ([type isEqualToString:@"B"]) {
value = [value boolValue] ? @"YES" : @"NO";
}