nsarray 中的 NSLog nsarray

Posted

技术标签:

【中文标题】nsarray 中的 NSLog nsarray【英文标题】:NSLog nsarray in nsarray 【发布时间】:2016-12-19 11:00:45 【问题描述】:

我创造了

NSArray *test = @[@[@1,@2,@3,@4], @[@3,@5,@6,@7]]; 

将被视为nsarraynsarray

但是当我想用

打印出来时
NSLog (@"%@", test); or NSLog(@"%@", test[0]);
NSLog (@"%@", [test ObjectAtIndex: 0]);

过程总是以

结束
NSException; Signal SIGABRT 
Reason: 'NSInvalidArgumentException', '-[__NSArrayI compare:]:unrecognized selector  sent to instance 0x608000262788' 

请帮助我,有人可以告诉我如何处理这个问题吗?以及一般如何调试问题'Signal SIGABRT'

【问题讨论】:

你可以使用[[[test objectAtIndex: 0] objectAtIndex: 0] objectAtIndex:0] ,因为你的数组里面包含更多数组 您可能希望使用代码格式编辑您的消息。 你犯了一个根本性的错误。 '@' 是在字符串之前使用的符号。 1、2、3、4等整数不是字符串。 @ElTomato,你是什么意思? @1 将是一个 NSNumber。在这种情况下使用NSLog(@"%@") 非常好。 @ElTomato 你绝对错了。如果您想在数组中添加 int,则将 @ 放在 Int 前面或使用 [NSNumber numberWithInt:4] 【参考方案1】:

SIGABRT 通常表示存在未捕获的异常。控制台上应该有更多信息。

我执行此代码是我的 xcode,它运行正常。

看看这个演示,希望你能得到更好的知识

我用这个代码

 NSArray *array = @[@"1111132324"];
 NSLog(@"array : %@", array);
 NSLog(@"array[0] : %@", array[0]);

我得到输出:

正如你看到的,当我打印数组时,它会在大括号“(”和“)”中给出输出。如果我只打印数组的单个元素,这里是字符串,则没有大括号。

如你所说,数组中有数组,试试这样

NSArray *arrayOuter = @[@"1111132324"];
NSArray *arrayInner = @[arrayOuter];

NSLog(@"array : %@", arrayInner);
NSLog(@"array[0] : %@", arrayInner[0]);
NSLog(@"array[0] : %@", arrayInner[0][0]);

查看输出:

您可以像这样将字典或数组的层次结构或数组-字典的混合(没关系)最多扩展 n 次。

每个键(对于字典)/索引(对于数组)都必须在该层次结构级别中。获取数据的方式是从上层到下层。

对于字典

dict[@"key1"][@"key2"]...[@"keyN"] 

用于混合 dict-arr

//upper object must be dictionary so start with key.
dict[@"key1"][0][@"key"]..[@"keyN"] or object index.

用于混合数组 - dict

//upper object must be array so start with index.
dict[0][@"key1"][@"key"]..[@"keyN"] or object index.

注意:键和索引的顺序取决于该层次结构中的对象。

【讨论】:

数组中使用了有问题的 int 变量,并且您在数组中使用了字符串变量,这意味着您正在测试错误的代码。请再次阅读问题【参考方案2】:

我希望这对你有用。

NSArray *test = @[@[@1,@2,@3,@4],
                @[@3,@5,@6,@7]];

NSLog(@"Test array: %@", test);
NSLog(@"Test firstObject: %@", [test firstObject]);
NSLog(@"Test lastObject : %@", [test lastObject]);
NSLog(@"Test objectAtIndex :%@", [test objectAtIndex:0]);
NSLog(@"Test objectAtIndex 2 :%@", test[0]);

【讨论】:

以上是关于nsarray 中的 NSLog nsarray的主要内容,如果未能解决你的问题,请参考以下文章

NSArray,NSMutableArray

从Objective C中的NSArray转换时如何比较String?

如何从 NSArray 中获取此文本值?

OC基础 NSArray 容器

NSArray文件读写

NSString 失败,应用程序崩溃尝试 NSLog NSError