使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错

Posted

技术标签:

【中文标题】使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错【英文标题】:Error printing NSCFNumber cast as NSNumber using NSNumberFormatter and RestKit 【发布时间】:2012-12-05 23:14:59 【问题描述】:

我正在尝试从 JSON 调用中打印/访问我的(双)值并获取:

[事件纬度]:无法识别的选择器发送到实例 0x8d09970

当从同一个对象访问一个字符串值时,它打印得很好。在调试器中,我看到我的值和 event.latitude 被映射为双精度的 NSCFNumber。我不知道这是否只是我没有正确地投射或声明纬度,还是没有正确映射该值。字符串工作

这里有一些代码:

event.h
@interface Event : NSObject  
    NSNumber    *latitude;


@property (nonatomic, retain) NSNumber *latitude;
@end

ViewController.m sn-p

Event *event = (Event *)[eventsArray objectAtIndex:indexPath.row];

static NSNumberFormatter *numberFormatter;
if (numberFormatter == nil) 
    numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:3];

NSLog(@"Event - %@", event.name );  //This works just fine
NSLog(@"Event - %@", event.latitude );  //This is where I am testing different ways of accessing the latitude
NSLog(@"Event - %@", [numberFormatter stringFromNumber:[event latitude]] );
//NSLog(@"Event - %@", [[event latitude] stringValue] );
NSString *coordinatesString = [[NSString alloc] initWithFormat:@"Lat:%@, Lon:%@",
                               [numberFormatter stringFromNumber:[event latitude]],
                               [numberFormatter stringFromNumber:[event longitude]]];

【问题讨论】:

【参考方案1】:

这绝对不是关于选角的问题。

您遇到的异常是由于缺少 latitude 实现,您可能忘记或打错了。

你有@synthesizeEvent.m实现文件中的属性吗?

【讨论】:

你成功了。我有动态的纬度;应该是合成的。其他属性已合成。【参考方案2】:

[Event latitude]: unrecognized selector sent to instance 0x8d09970 表示 Event 对象没有名为“纬度”的方法。

我建议您首先检查以确保您在所有地方都正确拼写了“纬度”(您可能会看五次这种东西,有时却看不到它),并且它是否正确(未)大写。

在那之后我会说你应该确保你没有以某种方式对“事件”有两种不同的定义。您可以创建 Event 的测试实例并直接访问“纬度”属性以确保一切正常。

【讨论】:

以上是关于使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSNumberFormatter 和 RestKit 将 NSCFNumber 转换为 NSNumber 时出错

NSNumberFormatter maximumFractionDigits 和 maximumSignificantDigits 错误

使用 NSNumberFormatter 将数字转换为格式

NSNumberFormatter、NSDecimalNumber 和科学记数法

在 Swift 中使用 NSNumberFormatter 格式化货币输入

使用 NSNumberFormatter 循环中的 Objective C 自动释放