Это странная проблема, и я работал над попыткой исправления различных проблем/исправления ошибок. Но я потратил немало времени на это и надеюсь, что кто-то с новыми глазами может потенциально определить основную причину этой проблемы.Почему мой NSArray выполняет итерацию в соответствии с количеством NSDictonaries
В основном я сериализую файл JSON как NSArray. Мне нужно сделать некоторые манипуляции с этими данными, поэтому я создаю NSMutableArray этого оригинального NSArray.
Затем я создаю NSDictonary и сравниваю objectForKey's.
Тем не менее, я заметил, что когда я выводю через инструкцию NSLog в консоли Xcode, я вижу, что массив повторяется по количеству словарей. Почему это печатает 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;
}
}];
UPDATE
Вот 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 раз, что равно количеству объектов ConnectabilityObject, найденных в файле JSON.
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>"
)
Непонятно. У вас есть 'for loop', и ваш код не должен компилироваться, вы делаете' [array addObject: object]; 'где' object' не объявлен. – Larme
Вопрос о неожиданном выходе NSLog должен содержать хотя бы одну инструкцию NSLog. – danh
Убедитесь, что у вас еще нет переменной с именем 'object', например @Larme,' [array addObject: object] 'не следует компилировать на основе этого кода, потому что ваш объект' ConnectabilityObject * 'не будет доступен в таком случае. – Wyatt