【问题标题】:Obj-C - Can't access values in NSArray?Obj-C - 无法访问 NSArray 中的值?
【发布时间】:2020-11-01 10:22:42
【问题描述】:

我有一个显示字符串的 textView:255,34,7,4

我正在尝试使用以下代码从我的 textView 中提取字符串,并将每个数字分成一个数组:

        NSArray *array = [self.textview.text componentsSeparatedByString:@","];
        NSString *comp1 = array[0];
        NSString *comp2 = array[1];
        NSString *comp3 = array[2];

这行得通,并且以下内容返回到我的数组中:

> 2020-07-11 15:21:58.110560-0700[10116:2311809] In the array you will
> find (
>     255,
>     34,
>     7,
>     4 )

但是我无法使用 array[1] 和 array[2] 访问第二个和第三个值?我的应用程序崩溃并出现以下错误:

*** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSSingleObjectArrayI objectAtIndex:]:超出索引 1 界限 [0 .. 0]'

为什么会这样?

【问题讨论】:

  • @OlSen array 不是 C 关键字。如果您尝试使用数据类型作为变量名,那么编译器将不会接受它。
  • 我的朋友威勒克。 :) 一直在我身边。

标签: objective-c nsstring nsarray


【解决方案1】:

因为您尝试访问的那一刻预期的对象不存在。 在访问运行时可能不存在的索引之前询问数组中可用的索引数量要安全得多。

NSArray *splitarray = [self.textview.text componentsSeparatedByString:@","];

NSLog(@"amount of indexes %lu", splitarray.count);

for (NSString *idxObject in splitarray) {
    NSLog(@"content @%",idxObject);
}

for (NSUInteger i=0; i<splitarray.count; i++) {
    NSLog(@"content @%",splitarray[i]);
}

NSArray 和许多其他索引数据类型不检查是否存在索引以加快访问速度,并且它们也不会构造为在索引不存在的情况下返回 nil。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多