Передать вывод JSON в другой класс - iPhone - PullRequest
0 голосов
/ 14 июля 2011

У меня есть два класса:

dbConnector - подключается к базе данных и получает данные viewcontroller - создает экземпляр dbConnector и вызывает функции извлечения данных

Проблема, с которой я сталкиваюсь, заключается в том, чтобы dbConnector передавал данные вviewcontroller:

dbConnectorClass:

#import "dbConnector.h"
#import "ASIFormDataRequest.h"
#import "JSONKit.h";

@implementation dbConnector
@synthesize data;

//method to 
-(void)getQuestions:(NSString*)sectionId from:(NSString*)url{
    NSURL *link = [NSURL URLWithString:url];
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:link]; 
    [request setPostValue:sectionId forKey:@"section"]; 
    [request setDelegate:self];
    [request setDidFinishSelector:@selector(requestFinished:)];
    [request startAsynchronous];    
}

- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSData *responseData = [request responseData];
    NSString *json = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSDictionary *questions = [json objectFromJSONString];
    NSLog(@"%@", questions);
    //need to pass questions to view controller...how??
    [json release];
}

@end

класс viewcontroller:

#import "dbQuestionGetterViewController.h"
#import "dbConnector.h";

@implementation dbQuestionGetterViewController
@synthesize questions, db;

-(void)viewDidLoad{
    db = [[dbConnector alloc]init];
    //code to initialise view
    [db getQuestions:@"2" from:@"http://dev.speechlink.co.uk/David/get_questions.php"];
    //self.questions = arr;
    [super viewDidLoad];
}

Я хотел бы назначить вопросы NSDictionary * из dbConnector синтезированному указателю вопросовв моем viewcontroller.m

Как я могу заставить dbConnector передавать возвращенную строку JSON в мой метод viewDidLoad контроллера представления?

1 Ответ

0 голосов
/ 14 июля 2011

Вы можете реализовать и делегировать протокол для класса dbConnector и сделать dbQuestionGetterViewController делегатом экземпляра dbConnector.

Редактировать:

Делегация

Протокол

Редактировать 2:

В dbConnector.h добавить перед импортом

@protocol dbConnectorDelegate 

-(void)didFinishDownloadData:(NSData*)data;

@end

В dbConnector.h в @interface добавьте:

id<dbConnectorDelegate> delegate;

и объявить новое свойство для делегата

@property (nonatomic, assign) id<dbConnectorDelegate> delegate;

В вашем файле dbConnector.m синтезируйте свойство делегата:

@synthesize delegate;

И в запросе Закончено добавить

[delegate didFinishDownloadData: responseData];

Этим вы сообщаете своему делегату, что вы закончили загрузку с параметром данных.

В вашем dbQuestionGetterViewController.h импортируйте dbConnector.h и сообщите dbQuestionGetterViewController, который будет реализовывать dbConnectorDelegate:

@interface dbQuestionGetterViewController : UIViewController<dbConnectorDelegate>

И в вашем dbQuestionGetterViewController.m добавьте

- (void)didFinishDownloadData:(NSData*)data{
        NSString *json = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        NSDictionary *questions = [json objectFromJSONString];
        NSLog(@"%@", questions);
        //need to pass questions to view controller...how??
        [json release];
    }

И ваш взгляд загрузил добавить:

db.delegate = self;
...