【问题标题】:I can't delete item from NSMutableArray我无法从 NSMutableArray 中删除项目
【发布时间】:2013-12-24 11:06:41
【问题描述】:

我无法解决问题。有一个数组NSMutableArray *array,其中包含以下值(@ "1", @ "2", @ "3", @ "4", @ "5")

我删除第一个元素,应该得到一个数组,其值为(@ "2", @ "3", @ "4", @ "5"),其中@"2"的值为index = 0

 [array removeObjectAtIndex:0];
     NSLog(@"Arr after removal is  : %@",array);

在控制台中我得到:

2
3
4
5

但是!当我在调试区域放置一个断点时,我看到以下内容:

->[0]=(id)0x00000000
->[1]=(id)0x092701a0 (int)2
->[2]=(id)0x092701b0 (int)3
->[3]=(id)0x092701c0 (int)4

我不明白值“5”的元素发生了什么以及为什么第一个元素没有被删除,而只是等于 nil ???如果有人遇到这个问题 - 请告诉我 谢谢。

【问题讨论】:

  • 我已经测试过并正确显示,您使用的是哪个版本的 Xcode n ios?
  • 如果你的数组是(@ "1", @ "2", @ "3", @ "4", @ "5")这种类型的值,它是String not an int的数组。
  • 等待控制台打印出正确的值,但您的问题是所有 0 的空内存地址 ????你明白那等于 nil 吧?
  • 好的..首先我在 xcode5 中测试过,它的显示是正确的,当我在 xcode 4.6 中检查它时,它会显示你所说的..
  • 不要相信调试器的“变量”视图,它有时是完全错误的。在调试器控制台中使用 NSLog 或 po。这应该显示正确的值。

标签: objective-c arrays xcode nsmutablearray


【解决方案1】:

NSArray 和相关类的实现不一定在后台使用传统的 C 数组。您在调试器对象浏览器中检查对象时看到的并不是您应该依赖的东西。详情请见this excellent article

如果您从数组中删除项目,并且数组对象的行为就像第一个项目已被删除,那么它的工作就完成了。 如何这不是你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    相关资源
    最近更新 更多