我正在尝试开发一个应用程序来接收来自 Web 服务的数据以显示在某些视图中。在应用程序的第一个版本中,我只有一个视图控制器和一个对 Web 服务的 GET 请求(通过 NSURLconnection):NSURLconnection 的所有方法都在 Viewcontroller 中,并且一切正常。
现在我需要添加其他视图并发出其他一些 GET 请求,所以我认为最好的办法是应用 MVC 模式:特别是我创建了一个类(FV_Data),我在其中放置所有 GET 请求并管理 NSURLconnections ,而在每个 ViewController 中,我为所需的 GET 请求调用方法(在 FV_Data 类中)。
我的问题是如何将带有数据的数组从 Web 服务返回到请求数据的 ViewController:在我的第一个测试中,正确启动了 NSURLconnection 并且数组(在 connectionDidFinishLoading 方法中)填充了来自Web 服务,但在视图控制器中,数组为空。
我读过不同的帖子,但我不明白我做错了什么。
这是我编写的代码(我省略了有效方法中的代码)。
谢谢, 科拉多
FV_Data.h
#import <Foundation/Foundation.h>
@interface FV_Data: NSObject {
NSMutableData *responseStatistic;
NSMutableData *responseGetStatus;
NSURLConnection *connectionStatistic;
NSURLConnection *connectionGetStatus;
}
-(NSArray *)richiediGetStatistic;
-(NSArray *)richiediGetStatus;
@property (nonatomic, retain) NSArray *ArrayStatistic;
@property (nonatomic, retain) NSArray *ArrayGetStatus;
@end
FV_Data.m
#import "FV_Data.h"
@implementation FV_Data
-(id)init {
self = [super init];
return self;
}
-(void)richiediGetStatistic{
...
}
-(void)richiediGetStatus{
...
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
...
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
...
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if(connection == connectionStatistic){
NSString *responseStatisticString = [[NSString alloc] initWithData:responseStatistic encoding:NSUTF8StringEncoding];
self.ArrayStatistic = [responseStatisticString componentsSeparatedByString:@","];
}
else if(connection == connectionGetStatus){
NSString *responseGetStatusString = [[NSString alloc] initWithData:responseGetStatus encoding:NSUTF8StringEncoding];
self.ArrayGetStatus = [responseGetStatusString componentsSeparatedByString:@","];
}
}
@end
FV_Live_ViewController.h
#import <UIKit/UIKit.h>
#import "FV_Data.h"
@interface FV_Live_ViewController : UIViewController {
IBOutlet UILabel *energia;
}
@property (nonatomic, retain) FV_Data *PVOutputData;
@end
FV_Live_ViewController.m
#import "FV_Live_ViewController.h"
@implementation FV_Live_ViewController
-(void)viewWillAppear:(BOOL)animated{
self.PVOutputData = [[FV_Data alloc] init];
[self.PVOutputData richiediGetStatistic];
energia.text = [self.PVOutputData.ArrayStatistic objectAtIndex:0];
}
@end