目标c - 使用int的奇怪行为

时间:2014-07-23 13:25:18

标签: ios objective-c xcode

我有一个将属性存储为int的对象。

当我在控制台中输入po menuItem.quantity时,我得到的是1,这正是我所期待的。

如果我尝试用这行代码填充标签:

label_Quantity.text=[NSString stringWithFormat:@"%d", menuItem.quantity];

我改为414280896

另外,请看下面的图片:

enter image description here

出于某种原因它显示_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"]];

它工作正常。如果有人能向我解释为什么第一种方法不起作用,我会选择那个答案。否则,我稍后会自己选择并选择我的。

感谢评论员帮助我。

1 个答案:

答案 0 :(得分:3)

NSDictionnary只能存储NSObject,这意味着当您致电[dict objectForKey:@"Total"]时,它会返回NSNumber *而不是int,这就是为什么fromDictionaryValueToInt menuItem.quantity = (int)[dict objectForKey:@"Total"]; 1}}工作。

如果你写(int) NSNumber演员对编译器说:我想将此int指针地址转换为menuItem.quantity,以便{{1}}收到地址而不是价值。