ios - 为什么我的 NSArray 根据 NSDictonaries 的数量进行迭代

标签 ios objective-c nsarray nsdictionary

这是一个奇怪的问题,我一直在努力尝试不同的解决方法/错误修复。但我已经在这方面花费了大量时间,希望眼光敏锐的人能够找出这个问题的根本原因。

基本上,我将 JSON 文件序列化为 NSArray。我需要对这些数据进行一些操作,因此我创建了原始 NSArray 的 NSMutableArray。

然后我创建一个 NSDictonary,并比较 objectForKey 的。

但是,我注意到当我在 Xcode 控制台中通过 NSLog 语句输出时,我看到数组是按字典数量迭代的。为什么打印出 30 个数组,每个数组有 30 个字典?

这是我拥有的一些与此问题相关的代码。让我知道您的想法以及我可以采取哪些措施来改进此/修复。

    self.objectsList = [[NSArray alloc] init];

[[HTTPServices instance] getConnectabilityObject:^(NSArray * _Nullable dataArray, NSString * _Nullable errorMessage) {
    if (dataArray) {
        NSMutableArray *array = [[NSMutableArray alloc] init];

        for (NSDictionary *dictonary in dataArray) {
            ConnectabilityObject *object = [[ConnectabilityObject alloc] init];
            object.ConnectabilityTitle = [dictonary objectForKey:@"ConnectabilityObjectTitle"];
            object.ConnectabilityObjectType  = [dictonary objectForKey:@"ConnectabilityObjectType"];
            object.ConnectabilityFullIPAddress = [dictonary objectForKey:@"ConnectabilityObjectFullIPAddress"];
            object.ConnectabilityObjectLastOctet = [dictonary objectForKey:@"ConnectabilityObjectLastOctet"];
            object.ConnectabilityObjectPortNumberOne = [dictonary objectForKey:@"ConnectabilityObjectPortNum1"];
            object.ConnectabilityObjectPortNumberTwo = [dictonary objectForKey:@"ConnectabilityObjectPortNum2"];
            object.ConnectabilityObjectPortNumberThree = [dictonary objectForKey:@"ConnectabilityObjectPortNum3"];

            [array addObject:object];
        }
        self.objectsList = array;
    }
}];

更新

这是与该数组关联的 NSLogStatement。请注意,我正在通过另一种方法记录此数据。该方法如下所示。

-(void)pingResult:(NSNumber*)success {
    NSMutableArray *objects = [NSMutableArray arrayWithArray:_objectlist];
    for (NSDictionary *objectDictonary in objects) {
        self.objectlist = nil;
        NSLog(@"Another Method NSLog %@", objects);
    }

这是来自控制台的 NSLog。请注意,这个“另一个方法 NSLog”被调用了 30 次,这等于在 JSON 文件中找到的 ConnectabilityObjects 的数量。

    2016-06-14 11:28:55.724 FlightPath[3866:1176806] Another Method NSLog (
    "<ConnectabilityObject: 0x16695d80>",
    "<ConnectabilityObject: 0x16696ad0>",
    "<ConnectabilityObject: 0x16696b90>",
    "<ConnectabilityObject: 0x16696be0>",
    "<ConnectabilityObject: 0x16696c30>",
    "<ConnectabilityObject: 0x16696ca0>",
    "<ConnectabilityObject: 0x16696cf0>",
    "<ConnectabilityObject: 0x165b14e0>",
    "<ConnectabilityObject: 0x165b1530>",
    "<ConnectabilityObject: 0x165b15c0>",
    "<ConnectabilityObject: 0x165b1610>",
    "<ConnectabilityObject: 0x165b1660>",
    "<ConnectabilityObject: 0x165b16b0>",
    "<ConnectabilityObject: 0x165b1700>",
    "<ConnectabilityObject: 0x165b1750>",
    "<ConnectabilityObject: 0x165b17a0>",
    "<ConnectabilityObject: 0x165b17f0>",
    "<ConnectabilityObject: 0x165b18b0>",
    "<ConnectabilityObject: 0x165b1900>",
    "<ConnectabilityObject: 0x16696d20>",
    "<ConnectabilityObject: 0x16696d50>",
    "<ConnectabilityObject: 0x16696da0>",
    "<ConnectabilityObject: 0x16696df0>",
    "<ConnectabilityObject: 0x16696e40>",
    "<ConnectabilityObject: 0x16696e90>",
    "<ConnectabilityObject: 0x16696ee0>",
    "<ConnectabilityObject: 0x16696f30>",
    "<ConnectabilityObject: 0x16696f80>",
    "<ConnectabilityObject: 0x16696fd0>",
    "<ConnectabilityObject: 0x166970e0>"
)
2016-06-14 11:28:55.729 FlightPath[3866:1176806] Another Method NSLog (
    "<ConnectabilityObject: 0x16695d80>",
    "<ConnectabilityObject: 0x16696ad0>",
    "<ConnectabilityObject: 0x16696b90>",
    "<ConnectabilityObject: 0x16696be0>",
    "<ConnectabilityObject: 0x16696c30>",
    "<ConnectabilityObject: 0x16696ca0>",
    "<ConnectabilityObject: 0x16696cf0>",
    "<ConnectabilityObject: 0x165b14e0>",
    "<ConnectabilityObject: 0x165b1530>",
    "<ConnectabilityObject: 0x165b15c0>",
    "<ConnectabilityObject: 0x165b1610>",
    "<ConnectabilityObject: 0x165b1660>",
    "<ConnectabilityObject: 0x165b16b0>",
    "<ConnectabilityObject: 0x165b1700>",
    "<ConnectabilityObject: 0x165b1750>",
    "<ConnectabilityObject: 0x165b17a0>",
    "<ConnectabilityObject: 0x165b17f0>",
    "<ConnectabilityObject: 0x165b18b0>",
    "<ConnectabilityObject: 0x165b1900>",
    "<ConnectabilityObject: 0x16696d20>",
    "<ConnectabilityObject: 0x16696d50>",
    "<ConnectabilityObject: 0x16696da0>",
    "<ConnectabilityObject: 0x16696df0>",
    "<ConnectabilityObject: 0x16696e40>",
    "<ConnectabilityObject: 0x16696e90>",
    "<ConnectabilityObject: 0x16696ee0>",
    "<ConnectabilityObject: 0x16696f30>",
    "<ConnectabilityObject: 0x16696f80>",
    "<ConnectabilityObject: 0x16696fd0>",
    "<ConnectabilityObject: 0x166970e0>"
)

最佳答案

是的。这是一个 NSLog 错误...

-(void)pingResult:(NSNumber*)success {
    for (NSDictionary *objectDictonary in _objectlist) {
        NSLog(@"%@", objectDictonary);
    }
}

在第一次尝试中,OP 代码是这样做的:

NSMutableArray *objects = [NSMutableArray arrayWithArray:_objectlist];

... 不必要地复制了实例数组 var。

OP 代码是这样做的:

self.objectlist = nil;

...这会危险地删除您要检查的实例数组。

并且,生成令人困惑的输出,OP 代码是这样做的:

NSLog(@"Another Method NSLog %@", objects);

... 表示:“对于我数组中的每个元素,记录我的整个数组”。

关于ios - 为什么我的 NSArray 根据 NSDictonaries 的数量进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815591/

相关文章:

c++ - 指向 objc 类成员方法的函数指针,用于 C++?

html - iOS Voice Over 无法读取 Aria-Label

ios - 关闭全屏模式时,不会调用 viewWillLayoutSubviews 方法

objective-c - 如何创建结构的 NSMutableArray?

ios - swift ios 通过循环为多个 subview 添加约束

ios - 使用 Sprite Kit 创建自定义 slider - 如何传递 @selector?

ios - indexPath.row 给出了奇怪的值

ios - 我如何将带有对象数组的 json 字符串转换为带有 nsdictionaries 的 nsarray - IOS

objective-c - 如何从包含任意对象的 NSSet 创建排序的 NSArray?

ios - newArray = array 和 newArray = [array copy] 有什么区别?