目前,我正在使用仍在开发中的 API。因此,响应中的键仍在变化。我已经成功地能够从 API 检索 JSON 数据并将其解析为 NSDictionary,然后使用此 NSDictionary 将值映射到自定义对象中。我使用的方法如下
-(id)initWithDictionary:(NSDictionary*)dictionary
{
if(self = [super init]){
_ID = [dictionary valueForKey:kKEY_ID];
_name = [dictionary valueForKey:kKEY_NAME];
_nestedObject = [[NestedObject alloc]initWithDictionary:[dictionary valueForKey:kKEY_NESTED_OBJECT]];
//etc...
}
return self
}
每个嵌套对象也包含相同的解析结构。
这工作正常,除非 API 发生变化。当某些事情发生变化时,所需的值不存在,这会导致意外行为或崩溃。
理想情况下,如果其中一个键发生更改,我想生成一个 NSError ,我可以使用它来打印已更改的值,帮助我更快地找到更改并纠正它。
我目前能够想出的唯一替代方法是混乱且不可维护的。
-(id)initWithDictionary:(NSDictionary*)dictionary andError:(NSError**)error
{
if(self = [super init]){
BOOL _parsedSuccessfully = TRUE;
if (_parsedSuccessfully) {
_ID = [dictionary valueForKey: kKEY_ID];
if (!_ID){
_parsedSuccessfully = FALSE;
*error = [NSError parsingErrorFromKey: kKEY_ID];
}
}
if (_parsedSuccessfully) {
_name = [dictionary valueForKey: kKEY_NAME];
if (!_name){
_parsedSuccessfully = FALSE;
*error = [NSError parsingErrorFromKey: kKEY_NAME];
}
}
if (_parsedSuccessfully) {
_nestedObject = [[NestedObject alloc]initWithDictionary:[dictionary valueForKey:kKEY_NESTED_OBJECT]];
if (!_nestedObject){
_parsedSuccessfully = FALSE;
*error = [NSError parsingErrorFromKey: kKEY_NESTED_OBJECT];
}
}
//etc...
if (!_parsedSuccessfully) {
return nil;
}
}
return self
}
我想知道是否还有其他人有其他更好的方法,最好使用更少的重复。
任何帮助将不胜感激。