【问题标题】:Pass JSON output to Another Class - iPhone将 JSON 输出传递给另一个类 - iPhone
【发布时间】:2011-07-14 22:15:53
【问题描述】:

我有两个班级:

dbConnector - 连接到数据库并检索数据 viewcontroller - 实例化 dbConnector 并调用数据检索函数

我面临的问题是让 dbConnector 将数据传递给视图控制器:

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

视图控制器类:

#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];
}

我想要将来自 dbConnector 的 NSDictionary* 问题分配给在我的 viewcontroller.m 中合成的问题指针

如何让 dbConnector 将返回的 JSON 字符串传递给我的视图控制器 viewDidLoad 方法?

【问题讨论】:

    标签: iphone objective-c xcode asihttprequest


    【解决方案1】:

    您可以为 dbConnector 类实现和委托协议,并使 dbQuestionGetterViewController 成为 dbConnector 实例的委托。

    编辑:

    Delegation

    Protocol

    编辑 2:

    在 dbConnector.h 中在导入前添加

    @protocol dbConnectorDelegate 
    
    -(void)didFinishDownloadData:(NSData*)data;
    
    @end
    

    在@interface 的dbConnector.h 中添加:

    id<dbConnectorDelegate> delegate;
    

    并为委托声明一个新属性

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

    在您的 dbConnector.m 文件中合成委托属性:

    @synthesize delegate;
    

    并在requestFinished中添加

    [delegate didFinishDownloadData: responseData];
    

    通过这种方式,您告诉您的代表您已使用 data 参数完成下载。

    在您的 dbQuestionGetterViewController.h 中导入 dbConnector.h 并告知将实现 dbConnectorDelegate 的 dbQuestionGetterViewController:

    @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;
    

    【讨论】:

    • 好吧,这就是我想要的,但我该如何实现呢?
    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2013-12-10
    • 2013-07-24
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多