Objective-C和ARC:为什么在初始化期间存储的值永远不会读取和不兼容的指针

时间:2016-04-06 02:39:17

标签: objective-c

当我运行分析器工具时,我在初始化过程中将值存储到(jsonArr和myrrh)永远不会在行上读取,并且不兼容的指针类型从' NsDictionarty *分配给' NSMutableArray * '

enter image description here

2 个答案:

答案 0 :(得分:5)

看看前两行:

NSDictionary *jsonArr = [[NSDictionary alloc] init];
jsonArr = [json objectForKey:@"categories"];

第一行创建并分配一个新词典。

然后第二行将新值重新分配给同一个变量。这会抛弃原始值。因此警告该值永远不会被使用。

这两行应该只是:

NSDictionary *jsonArr = [json objectForKey:@"categories"];

实际上,更好的是:

NSDictionary *jsonDict = json[@"categories"];

不要使用Arr命名字典变量。这令人困惑。并使用现代语法。

myArr的问题是相同的。虽然您还有一个问题,即尝试将NSDictionary分配给NSMutableArray。这两者绝不相容。

可能jsonArr已正确命名,其类型应为NSArray而非NSDictionary。即便如此,您也无法将NSArray分配给NSMutableArray。你需要制作一个可变副本:

NSArray *jsonArr = json[@"categories"];
NSMutableArray *myArr = [jsonArr mutableCopy];

答案 1 :(得分:1)

在Obj-C中键入变量,意味着只能分配符合该变量类型的值。

在您的代码中(很难阅读)myArr的类型为NSMutableArray *(对NSMutableArray的引用),而jsonArr的类型为{{1} }(对NSDictionary*的引用)

如果没有类型转换操作(强制转换),您无法将jsonArr中的值分配给myArr。