【问题标题】:NSNumber being recognized as NSString in if-elseNSNumber 在 if-else 中被识别为 NSString
【发布时间】:2011-12-07 20:07:16
【问题描述】:

我有这段让我发疯的代码。它是一个显示 4 个属性的 cellForRowAtIndexPath,其中 2 个是 NSStrings,2 个是 NSNumber:

//THIS LOGS THE OBJECT BEFORE PROCESSING
NSLog(@"NO DATE EDITING");
NSLog(@"eFK: %@, eFN: %@",editedFieldKey, editedFieldName);
NSLog(@"editedObject vWA is:%@", editedObject);
NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No");
//THIS TESTS TO SEE IF ITS A NSSTRING
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
    NSLog(@"its nsstring");
    textField.text = [editedObject valueForKey:editedFieldKey];
    NSLog(@"its NOT nsstring");
    }
} else {
//ELSE ITS A NUMBER SO GET ITS STRING VALUE BEFORE ASSIGNING
    textField.text = [[editedObject valueForKey:editedFieldKey] stringValue];
    // And we set the switch to ON if YES, OFF if NO...
    if ([editedObject valueForKey:editedFieldKey]) {
        NSLog(@"itemreceived equal to 1");
        itemReceived.on = YES;
    } else {
        NSLog(@"itemreceived equal to 0");
        itemReceived.on = NO;
}
[textField becomeFirstResponder];

我有 4 个字段,2 个 NSStrings 和 2 个 NSNumbers。当我点击字符串字段时,我得到一个字符串并且它工作正常。但是,如果我单击其中一个数字字段,我会得到一个字符串,并且 NSCFNumber isNaturallyRTL...无法识别的选择器发送到以下位置的实例:

textField.text = [editedObject valueForKey:editedFieldKey];

为什么我的测试失败了?为什么即使我选择了一个不是字符串的数字,应用程序也会通过第一个 if 条件,就好像它是一个字符串一样?

【问题讨论】:

  • 您需要编辑您的问题以包含您的程序打印的完整、准确的错误消息,而不是只告诉我们其中的一部分。

标签: objective-c nsstring nsnumber


【解决方案1】:

如果我不得不猜测,我会说您正在测试错误变量的类型。而不是:

...
if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
...

仅根据您的变量名称(因为您的问题有点缺乏细节),您似乎想要:

...
if ([[editedObject valueForKey:editedFieldKey] isKindOfClass:[NSSTRING class]]) {
...

我在 sn-ps 中留下了您的拼写错误 - 但无法编译。您实际上不是使用[NSString class] 而不是[NSSTRING class] 吗?注意大小写差异。

【讨论】:

    【解决方案2】:

    嗯。这只是一个猜测......但首先:

    NSLog(@"Is of type NSString?: %@", ([editedFieldKey isKindOfClass:[NSString class]])? @"Yes" : @"No");
    

    在这里,您查看editedFieldKey

    if ([editedFieldName isKindOfClass:[NSSTRING class]]) {
    

    您正在查看editedFieldName。在这两种情况下,我看起来好像您正在测试实际值。

    【讨论】:

    • 事实就是如此。发布几秒钟后,我意识到这一点,现在它工作得很好。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多