用UITextField疯狂

时间:2011-11-28 14:03:51

标签: objective-c ios nsstring uitextfield nsnumber

我真的疯了这六行代码。

注意:nomeprezzo是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

4 个答案:

答案 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];