【问题标题】:Getting Index of an Object from NSArray?从 NSArray 获取对象的索引?
【发布时间】:2011-11-15 22:08:47
【问题描述】:

我正在尝试通过 indexOfObject 方法获取数组的索引,如下所示,但是当我尝试记录值以测试索引时,我得到一个垃圾值.. 出于测试目的,我有一个具有值{57,56,58..} 的数组以获取让我们说56 的索引,

NSNumber *num = [NSNumber numberWithInteger:56];
NSInteger Aindex = [myArray indexOfObject:num];
NSLog(@" %d",Aindex);

我得到的值类似于2323421。我可能做错了什么??

【问题讨论】:

  • 你真的把它插入到数组中了吗?
  • 你的 myArray 包含什么样的数据类型值
  • 我正在向数组添加一个 NSString 值并将数组对象与 NSNumber 进行比较.. 不认为这会是一个问题,但最终不得不将对象与字符串值进行比较以使其正确..

标签: iphone ios nsarray


【解决方案1】:

indexOfObject 返回的索引将是您的对象出现的第一个索引。使用isEqual 方法测试相等性。
你得到的垃圾值大概等于NSNotFound
尝试针对它测试anIndex。您要查找的号码可能不在您的数组中:

NSNumber *num=[NSNumber numberWithInteger:56];
NSInteger anIndex=[myArray indexOfObject:num];
if(NSNotFound == anIndex) {
    NSLog(@"not found");
}

或记录数组的内容以确保:

NSLog(@"%@", myArray);

【讨论】:

  • 我正在向数组添加一个 NSString 值并将数组对象与 NSNumber 进行比较.. 不认为这会是一个问题,但最终不得不将对象与字符串值进行比较以使其正确..
  • 如果我多次拥有同一个对象怎么办?
【解决方案2】:

伙计们,

当在数组中找不到对象时,indexOfObject 方法不会返回“垃圾”值。如果未找到该项目,许多系统会返回 -1 的索引。

但是,在 IOS 上 - 因为 indexOfObject 返回一个 UNSIGNED int(又名 NSUInteger),所以返回的索引必须大于或等于零。由于“零”是一个有效的索引,因此无法向调用者指示找不到对象——除非返回一个我们都可以测试的一致同意的常量值。这个约定值的常量称为 NSNotFound。

方法:

- (NSUInteger)indexOfObject:(id)anObject;

如果对象不在数组中,则返回 NSNotFound。 NSNotFound 是一个非常大的正整数(通常是 1 减去平台上的最大 int)。

【讨论】:

  • @joe 如果你 CMD+单击 NSNotFound,你会看到它被定义为enum {NSNotFound = NSIntegerMax};。我知道 NSIntegerMax 和 NSUIntegerMax 都是正数,但是使用 NSUIntegerMax 会不会更明智,因为它用于返回 NSUInteger 的函数?另外,如果我正在搜索放置在数组索引 NSIntegerMax 的对象怎么办?我不会被骗以为对象是 NSNotFound 吗?
【解决方案3】:
NSNumber *num1 = [NSNumber numberWithInt:56];
    NSNumber *num2 = [NSNumber numberWithInt:57];
    NSNumber *num3 = [NSNumber numberWithInt:58];
    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:num1,num2,num3,nil];
    NSNumber *num=[NSNumber numberWithInteger:58];

    NSInteger Aindex=[myArray indexOfObject:num];

    NSLog(@" %d",Aindex);

它给出了正确的输出,可能是你在你的数组中存储对象时做错了。

【讨论】:

    【解决方案4】:

    试试这个:

    NSArray 的indexOfObject: 方法。如:

    NSUInteger fooIndex = [someArray indexOfObject: someObject];
    

    【讨论】:

      【解决方案5】:

      如果您使用的是 Swift 和可选项,请确保它们是未包装的。您无法搜索可选对象的索引。

      【讨论】:

        【解决方案6】:

        我刚刚检查过了。它对我来说工作正常。检查您的阵列是否具有特定编号。如果元素不存在,它将返回此类垃圾值。

        【讨论】:

          【解决方案7】:

          indexOfObject 方法将获取该数组中相应字符串的索引,如果字符串类似于 @"Test" 并且您发现类似于 @"TEST" 现在这将重新调整索引,如长数字

          【讨论】:

            猜你喜欢
            • 2023-03-03
            • 2013-12-04
            • 2012-04-06
            • 1970-01-01
            • 1970-01-01
            • 2010-11-29
            • 1970-01-01
            • 2013-12-19
            • 1970-01-01
            相关资源
            最近更新 更多