我有一个将属性存储为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"]];
而且工作正常。如果有人可以向我解释为什么第一种方法不起作用,我将选择该答案。否则,我稍后将自己放置并选择我的。
感谢评论者的帮助。
最佳答案
NSDictionnary
只能存储NSObject,这意味着当您调用[dict objectForKey:@"Total"]
时,它将返回NSNumber *
而不是int
,这就是fromDictionaryValueToInt
起作用的原因。
如果您将menuItem.quantity = (int)[dict objectForKey:@"Total"];
写入(int)
,则对编译器说:我想将此NSNumber
指针地址转换为int
,以便menuItem.quantity
将接收该地址而不是该值。