我有一个将属性存储为int的对象。
当我在控制台中输入po menuItem.quantity
时,我得到的是1
,这正是我所期待的。
如果我尝试用这行代码填充标签:
label_Quantity.text=[NSString stringWithFormat:@"%d", menuItem.quantity];
我改为414280896
另外,请看下面的图片:
出于某种原因它显示_quantity = (int) 414280896
但是当我点击i
图标时,我得到1
。
这里发生了什么?
编辑1:
根据评论者的要求,这是MenuItemDTO:
@interface MenuItemDTO : NSObject
@property (nonatomic) int menuItemID;
@property (nonatomic, strong) NSString* name;
@property (nonatomic, strong) NSString* description;
@property (nonatomic) int quantity;
@property (nonatomic, strong) NSString* imageURL;
@property (nonatomic) int categoryID;
@property (nonatomic) float price;
@property (nonatomic) BOOL isSponsoredItem;
@property (nonatomic, strong) NSDate* lastModifiedDate;
@end
它是这样创建的:
MenuItemDTO * menuItem = [MenuItemDTO new];
menuItem.quantity = [Converter fromDictionaryValueToInt:[json objectForKey:@"Quantity"]];
json是一个NSDictionary,具有来自Web服务的不同值。
Converter fromDictionaryValueToInt
看起来像这样:
+ (int)fromDictionaryValueToInt:(NSNumber *)value
{
if ([value isKindOfClass:[NSNull class]])
return 0;
return [value intValue];
}
编辑2:
我发现了问题,但不明白为什么它没有用。 初始化时问题并没有出现。那工作得很好。看起来在代码的后面,数量被分配了另一个这样的值:
menuItem.quantity = (int)[dict objectForKey:@"Total"];
这给出了奇怪数字的问题。现在我这样做了:
menuItem.quantity = [Converter fromDictionaryValueToInt:[dict objectForKey:@"Total"]];
它工作正常。如果有人能向我解释为什么第一种方法不起作用,我会选择那个答案。否则,我稍后会自己选择并选择我的。
感谢评论员帮助我。
答案 0 :(得分:3)
NSDictionnary
只能存储NSObject,这意味着当您致电[dict objectForKey:@"Total"]
时,它会返回NSNumber *
而不是int
,这就是为什么fromDictionaryValueToInt
menuItem.quantity = (int)[dict objectForKey:@"Total"];
1}}工作。
如果你写(int)
NSNumber
演员对编译器说:我想将此int
指针地址转换为menuItem.quantity
,以便{{1}}收到地址而不是价值。