방금 Swipe 2.2에서 3.0으로 프로젝트를 변환했으며 테스트에서 새로운 예외가 발생했습니다.Swift 3 NSDictionary에서 사전 변환으로 인해 NSInvalidArgumentException이 발생합니다.
+ (NSDictionary *)getJSONDictionaryFromFile:(NSString *)filename {
/* some code which checks the parameter and gets a string of JSON from a file.
* I've checked in the debugger, and jsonString is properly populated. */
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:[jsonString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
return jsonDict;
}
좀 스위프트 코드에서이 전화 해요 : : 나는 파일에서 일부 JSON에 읽어 내 시험 중 하나에 몇 가지 목표 C 코드가
이let expectedResponseJSON = BZTestCase.getJSONDictionary(fromFile: responseFileName)
이 잘 작동 가장 시간의, 그러나 나는 오류를 발생시키는 하나 개의 JSON
파일이 :
failed: caught "NSInvalidArgumentException", "-[__NSSingleObjectArrayI enumerateKeysAndObjectsUsingBlock:]: unrecognized selector sent to instance 0x608000201fa0"
이에 대한 이상한 점은 오류가 생성된다는 것이다 getJSONDictionaryFromFile
메서드가 반환되고 Swift 코드의 expectedResponseJSON
이 채워집니다. 나에게이 말은 문제가되는 NSDictionary
에서 Dictionary
으로의 변환이라고 생각됩니다. 잘못된 JSON 파일이 하나입니다 : 내가 []
을 둘러싸는 가장 바깥 쪽을 제거하면
[
{
"status": "403",
"title": "Authentication Failed",
"userData": {},
"ipRangeError": {
"libraryName": "Name goes here",
"libraryId": 657,
"requestIp": "127.0.0.1"
}
}
]
이 오류가 사라집니다. Swift 3에서 JSON 파일의 최상위 엔티티로 배열을 사용하는 유일한 사람이 될 수 없습니다. 제가 잘못 했나요? 이 오류를 해결하려면 어떻게해야합니까?
물론 최상위 JSON 객체로 배열을 사용할 수 있습니다. 그러나 당신은 배열이 아닌 사전으로 취급해야합니다. –