【问题标题】:How to get index in an mutable array?如何在可变数组中获取索引?
【发布时间】:2011-08-18 16:52:09
【问题描述】:

我知道indexOfObject 可以返回数组中元素的索引,但我检查此方法是NSArray 方法而不是NSMutableArray 方法,并且我的数组中的元素是对象,这有关系吗?因为目前我的程序在调用以下代码时崩溃。

Class *obj = [[Class alloc] init];
obj.textField1 = outlet1.text;
obj.textField2 = outlet2.text;
NSUInteger index = [myMutableArray indexOfObject:obj];
outlet1.text = [[myMutableArray objectAtIndex:index-1] textField1];
outlet2.text = [[myMutableArray objectAtIndex:index-1] textField2];
[obj release];

我在这里要做的是,当我调用上面的代码时,这些出口会显示数组中前一个对象的详细信息。帮忙?

好的,这就是我真正想做的事情:

我想通过在两个文本字段中输入内容来创建一个对象,然后将该对象存储在一个数组中。我所说的数组已经在头文件中声明并分配了空间。上面的代码实际上是一个显示之前已经创建的对象的方法。前三行旨在创建一个对象,该对象代表文本字段中显示的当前对象。然后我想在我的数组中查找它并获取它的索引。我使用“index-1”的原因是因为我想查看之前创建的对象。而“崩溃”是指程序简单地退出并返回到我的模拟器上的主屏幕。 谢谢!


好吧,我终于找到了解决问题的方法,我找到了另一种获取当前对象的方法,而不是“创建”一个“新”对象并将其与数组中的对象进行比较,我使用了一个标志记录屏幕上当前对象的索引并递减它以获得上一个对象。无论如何,谢谢你们。

【问题讨论】:

    标签: iphone ios4 nsmutablearray nsarray


    【解决方案1】:

    NSMutableArray 扩展了 NSArray 并继承了它的所有方法。所以在 NSMutableArray 上调用 objectAtIndex: 就可以了。

    如果没有崩溃日志,我无法判断问题出在哪里,但我的第一个猜测是,当 index0 时,index-1-1,或者当 indexOfObject: 返回 @ 时超出范围987654327@.

    【讨论】:

    • “崩溃”是指当我运行我的程序时,它就退出了。索引不能为 0,因为前三行代码获取了我数组中最后一个元素的索引,并且有些元素已经存在。
    【解决方案2】:

    您正在执行 index - 1 ,如果 index == 0 则将是无效位置。该函数返回一个索引。这已经是基于 0 的了。 :)

    【讨论】:

    • 我在多元素数组上尝试,前三行代码获取最后一个元素的索引。
    【解决方案3】:

    Michael,将对象存储在可变数组中...

    YourObject *obj = [[YourObject alloc] init];
    obj.textField1 = ... ;
    obj.textField2 = ... ;
    
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:1];
    [array addObject:obj];
    

    稍后,从可变数组中获取对象...

    for (ID *obj in array) 
    {
      if ([obj isKindOfClass:[YourObject class]]) 
      {
        outlet1.text = (SomeObject)obj.textField1;
        outlet2.text = (SomeObject)obj.textField2;
      }
    }
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢,也许我没有提供足够的代码...我已经有一个名为“myMutableArray”的数组,其中有一些对象。该对象有两个必须在两个文本字段中指定的属性。我想要做的是获取当前对象的索引,其属性当前显示在文本字段中。
    • @Michael - 我同意 Titandecoy 和 ExtremeCoder,没有理由使用 index-1。只需使用 index ,您将获得所需的对象。除此之外,我不确定你想用你的代码做什么。对不起,伙计。
    【解决方案4】:

    首先,obj 何时被放入上述代码中的数组中?似乎您正在尝试查看 Class 对象是否在您的数组中,但是您正在分配一个新对象,然后进行检查。如果您对数组中的对象有实际引用,则应该使用indexOfObject:,否则,它怎么会在那里?此外,如果对象不存在,indexOfObject: 将返回 NSNotFound,这可能就是您的方法崩溃的原因。如果你想在你的数组中找到某个类的最早的对象,试试:

    for(int i = 0; i < [myMutableArray count]; i++){
      if([[myMutableArray objectAtIndex:i] isKindOfClass:[Class class]]){
        // Do stuff.
        break;
      }
    }
    

    希望有帮助!

    【讨论】:

      【解决方案5】:

      这是调试器的工作。在崩溃的行中放置一个断点,并检查变量的值。听起来您希望变量具有特定值(数组中的最后一个对象),但假设数组为空? GDB 是你的朋友,在 Xcode 4.1 中甚至更好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-30
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        相关资源
        最近更新 更多