Web サービスからデータを受け取り、いくつかのビューに表示するアプリを開発しようとしています。アプリの最初のバージョンでは、1 つのビュー コントローラーと Web サービスへの 1 つの GET 要求 (NSURLconnection による) しかありません。NSURLconnection のすべてのメソッドは Viewcontroller にあり、すべてがうまく機能しています。
ここで、他のビューを追加して他の GET リクエストを作成する必要があるため、MVC パターンを適用するのが最善であると考えていました。特に、すべての GET リクエストを配置して NSURL 接続を管理するクラス (FV_Data) を作成しました。 、各 ViewController で、必要な GET 要求のメソッド (FV_Data クラス内) を呼び出します。
私の問題は、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