我想開發一個應用程序接收來自Web服務的數據,以顯示在一些視圖。 在應用程序的第一個版本中,我只有一個視圖控制器和一個對Web服務的GET請求(通過NSURLconnection):NSURLconnection的所有方法都在Viewcontroller中,並且一切正常。在不同的類NSURLconnection
現在我需要添加其他視圖並做出其他的GET請求,所以我想最好的辦法是應用MVC模式:特別是我創建了一個類(FV_Data),我把所有的GET請求並管理NSURLconnections,而在每個ViewController中,我調用方法(在FV_Data類中)獲取所需的GET請求。
我的問題是如何將數據從Web服務返回到請求數據的ViewController:在我的第一次測試中,NSURLconnection已正確啓動,並且數組(在connectionDidFinishLoading方法中)中填充了來自Web服務的數據,但在View Controller中,數組是空的。
我讀過不同的帖子,但我不明白我做錯了什麼。
這是我寫的代碼(我省略了工作方法中的代碼)。
感謝, 科拉多
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
我建議你考慮採用Apple建立的[命名約定](https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html),特別是使用camelCase,小寫第一個字母的變量,只使用前導大寫字母的類,不使用下劃線等。 – Rob