我真的疯了这六行代码。
注意:nome
和prezzo
是2个textFields
NSString *itemName = (NSString *) [rowVals objectForKey:@"name"];
NSString *itemPrice = (NSString *) [rowVals objectForKey:@"price"];
nome.text = itemName;
nome.userInteractionEnabled = YES;
prezzo.text = itemPrice;
prezzo.userInteractionEnabled = YES;
不知道为什么当itemPrice
被复制到其中一个标签中时,程序会进入SIGABRT。
相反,如果我尝试使用NSLog(@"%@",itemPrice);
阅读内容,则会返回确切的值,因此这意味着它是有效的NSString
。
我找到的唯一解决方案是通过NSNumber
:
NSNumber *itemPrice = (NSNumber *) [rowVals objectForKey:@"price"];
prezzo.text = [[NSString alloc] initWithFormat:@"%@", itemPrice];
还有另一种方法可以直接使用NSString
?
答案 0 :(得分:3)
@“price”字段中的值可能是NSNumber,而不是NSString。 NSLog方法仍然会提供正确的结果,因为%@用于任何NSObject子类,而不仅仅是NSString。
答案 1 :(得分:3)
这个怎么样:
NSString *itemPrice = [[rowVal objectForKey:@"price"] stringValue];
prezzo.text = itemPrice;
答案 2 :(得分:0)
问题可能是[rowVals objectForKey:@"price"]
返回的对象类型。在方法调用之前放置(NSString *)
强制转换时,您告诉编译器返回了什么类型的对象,但实际上并没有将其转换为NSString。您在下面使用的行确实从NSNumber(或任何其他对象)转换为字符串:[[NSString alloc] initWithFormat:@"%@", itemPrice]
答案 3 :(得分:0)
您可能在NSDictionary中存储NSNumber的对象而不是NSString。
可能有两种方法:一种方法是将NSNumber转换为NSString,同时将其添加到字典中,另一种方法是将NSNumber转换为NSString,同时将其分配给“itemName”。
你可以进行第二种选择的转换,如:
NSString *itemPrice = [[rowVals objectForKey:@"price"]stringValue];