Я пытаюсь разработать приложение для получения данных из веб-службы для отображения в некоторых представлениях. В первой версии приложения у меня есть только один контроллер вида и один запрос GET для веб-службы (с помощью NSURLconnection): все методы NSURLconnection находятся в Viewcontroller, и все работает хорошо.NSURLсоединение в другом классе
Теперь мне нужно будет добавить другие представления и сделать некоторые другие запросы GET, поэтому я думал, что лучше всего применить шаблон MVC: в частности, я создал класс (FV_Data), где я поместил все запросы GET и управлять NSURLconnections, в то время как в каждом ViewController я вызываю метод (в классе FV_Data) для необходимого запроса GET.
Моя проблема заключается в том, как вернуть массив с данными веб-службы в ViewController, который запрашивал данные: в моих первых тестах NSURLconnection был правильно запущен, а массив (в методе connectionDidFinishLoading) заполнен данные из веб-службы, но в контроллере просмотра массив пуст.
Я читал разные сообщения, но я не могу понять, что я делаю неправильно.
Это код, который я написал (я опускаю код в методах, которые работают).
Спасибо, Corrado
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
Я бы посоветовал вам рассмотреть возможность принятия установленных [установленных правил использования именования] (https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html), в частности с помощью camelCase, нижняя регистр первой буквы для переменных, используя только верхние заглавные буквы для классов, не используя символы подчеркивания и т. д. – Rob