Существует несколько вариантов анализа данных JSON. SBJSON был упомянут. JSONKit - еще один очень быстрый вариант. На самом деле это не сложнее, чем ходить по экземплярам NSArray и NSDictionary, возвращаемым анализатором.
EDIT:
Я вижу; вам интересно, как передать результаты асинхронного процесса обратно любому объекту, создавшему этот процесс. Почему бы не использовать блоки для этого?
Определите блок завершения для этого:
typedef void(^myJSONReturnBlock)(NSArray *jsonObjs);
и ivar для него в вашем классе синтаксического анализатора:
@interface MYParserClass : NSObject
{
myJSONReturnBlock _completionHandler;
}
Тогда ваш parse
метод будет выглядеть примерно так:
- (void)parseWithCompletionHandler:(myJSONReturnBlock)aHandler;
{
_completionHandler = Block_copy(aHandler);
// set up your asynchronous NSURLConnection here, etc
}
Теперь ваши методы-делегаты должны будут передать массив следующим образом:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
{
// parse data to array of objects
if( _completionHandler )
_completionHandler(yourNSArrayInstance);
}
Наконец, ваш вызывающий класс попросит анализатор выполнить синтаксический анализ следующим образом:
[myParserClassInstance parseWithCompletionHandler:^(NSArray *jsonObjs)^{
// do something with the objects returned to you.
}];
Кроме того, не забудьте Block_release
ваш блок завершения ivar в вашем классе синтаксического анализатора в dealloc
Но если вы не хотите иметь дело с блоками, то просто шаблон делегата, в котором ваш класс содержит ссылку на класс, которому вы хотите передать данные.