Вы ожидаете, что возвращаемое значение JSONValue
является NSArray
, что в данном случае не так.
Итак, вы должны проверить, действительно ли возвращаемое значение NSArray
, и если это так, то итерация по коллекции, в противном случае проверьте, является ли она NSDictionary
, а если это так, то верните объект Cart
с refid
из NSDictionary
.Если все это не сработало, просто верните nil
.
. В качестве дополнительной точки, согласно Политике владения объектами , вы должны вернуть autorelease
-d объекты из методов, имена которыхне содержат слова «alloc», «new» или «copy».Это был бы один из таких методов, где вы должны вернуть autorelease
-d объект.
+ (Cart *) parseJsonAndReturnObject:(NSString *)json
{
id cart = [json JSONValue];
NSString* refid = nil;
if([cart isKindOfClass:[NSArray class]]) {
refid = [[cart objectAtIndex:0] objectForKey:@"refid"];
} else if([cart isKindOfClass:[NSDictionary class]]) {
refid = [cart objectForKey:@"refid"];
}
if(refid) {
Cart* c = [[Cart alloc] init];
[c setRefid:refid];
return [c autorelease];
}
return nil;
}