이것은 이상한 문제이며 다른 해결 방법/버그 수정을 시도하고 있습니다. 그러나 나는 이것에 상당한 시간을 할애하여 누군가 새로운 눈으로이 문제의 근본 원인을 잠재적으로 발견 할 수 있기를 바랍니다.내 NSArray가 NSDictonaries의 수에 따라 반복되는 이유는 무엇입니까?
기본적으로 JSON 파일을 NSArray로 직렬화합니다. 이 데이터로 조작 할 필요가 있으므로 원본 NSArray의 NSMutableArray를 만듭니다.
그런 다음 NSDictonary를 만들고 objectForKey를 비교합니다.
그러나 Xcode 콘솔에서 NSLog 문을 통해 출력 할 때 Array가 사전의 수만큼 반복되는 것을 보았습니다. 왜 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입니다. 이 "Another Method NSLog"는 JSON 파일에있는 ConnectabilityObjects의 수와 같은 30 번 호출됩니다.
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 루프를 가지고 있고 당신의 코드는 컴파일되어서는 안된다.'[array addObject : object];''object'가 선언되지 않은 곳에서해야한다. – Larme
놀라운 NSLog 출력에 관한 질문은 최소한 하나의 NSLog 문을 포함해야합니다. – danh
@Larme처럼'ConnectableObject * object'가 범위에 포함되지 않기 때문에'[array addObject : object]'가이 코드를 기반으로 컴파일하면 안된다. 그 시점에서. – Wyatt