【问题标题】:Simple Numbers to string issue Objective C简单数字字符串问题 Objective C
【发布时间】:2011-06-08 17:45:44
【问题描述】:

所以,我解释起来可能有点混乱,但就这样吧。

我有,我认为是存储在核心数据中的数字,我正在尝试将它们转换为字符串,以便我可以将它们用作表格单元格的标签,也许很愚蠢,但请多多包涵。

我将核心数据项泵入一个数组并试图将它们取出,我运行一个 FOR 循环并使用此代码为每个项生成一个数字。

NSNumber *num = [arr objectAtIndex:i];

当我运行时,我没有收到任何错误,如果我记录它们,我会按预期返回所有内容。但是,如果我之后运行此程序,程序将强制退出。

NSString *myOutput = [num stringValue];

我相信这是因为我实际拥有和抽出的东西并不是一个真正的数字,因此它不能使用 stringValue 变成一个字符串,有人知道一种方法来测试一个对象是什么吗?也许如何使用 NSLog?

还有一个问题。在我创建对象的 FOR 循环中,我需要记住每次循环运行正确时释放它们?

非常感谢!

【问题讨论】:

  • 你能把循环的代码贴出来吗?可能存在内存问题。
  • 首先,崩溃日志会有所帮助。您的第二行代码相对于第一行在哪里?而且你不需要释放num,因为它不会被保留。

标签: iphone objective-c xcode core-data


【解决方案1】:

有几种方法可以检查对象包含什么或它们是否属于某种类型;要么

[myObject class];

检查 - 如果你在它之后换行,你可以看到课程。但是,使用您的 NSNumber 时,它要么是一个数字,要么里面什么都没有,即

if (myNSNumber != nil)
    // then it must hold a value

最后,有这个测试 - 也是完全可行的:

if ([myProbableStringObject isKindOfClass:[NSString class]])
    // then let's do something with it

也可以 - 您应该释放在 for 循环中创建的对象,以获得最佳的内存管理和代码效率。希望这会有所帮助:)

【讨论】:

  • 太棒了!好的,现在它告诉我我所谓的数字是 _PFCachedNumber,但是如果我创建一个具有更可靠值 numberWithInt:10 的不同 NSNumber,它会告诉我它是一个 NSCFNumber,有没有办法将缓存的数字变成NSCFNumber?
  • 听起来像个问题...页面文件缓存的数字猜测。快速查找后,听起来数字没有被复制或设置正确——这个链接上的人报告了同样的错误,可能值得一看。 stackoverflow.com/questions/4422105/no-hit-on-if-statement 另外,您能否告诉我们您创建要复制的原始数组的位置以及复制代码的放置位置?
  • 好吧,经过一番调查,我发现了以下内容,我输入核心数据的数字作为真正的 NSNumbers 给出,但是当我检索它们时,它们被返回为 _PFCachedNumbers,我无法想象这是标准与谷歌有多少有它。如果您想看一下,我在这里提出了一个新问题。
  • 会的 :) 很高兴知道您的结果。如果可以的话,请随意接受其中一个答案 - 给所有人加分。
【解决方案2】:

您可以尝试使用:

NSLog( @"It is a '%@'", [[arr objectAtIndex:i] class] );

我认为它应该告诉你你想知道什么。

【讨论】:

    【解决方案3】:

    从 managedObject 的属性中产生的一切都是对象。没有标量值。任何数字数据都包含在 NSNumber 实例中。

    我认为你崩溃的原因比较平淡。如果你把这个变量赋值:

    NSNumber *num = [arr objectAtIndex:i];
    

    ... 在 for 循环中,然后 num 将仅作用于循环内部。一旦循环完成num 将消失。

    您的崩溃很可能是由于在循环完成后尝试访问num 造成的。简单地将 num 的声明移到循环外,如下所示:

    NSNumber *num; 对于(某事;某事++;某事

    ...然后这一行:

    NSString *myOutput = [num stringValue];
    

    ... 将在最后一次迭代中将myOutput 设置为num 的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多