1

API呼び出しを行い、jsonデータとフォーマットを取得して配列を返す関数を持つヘルパークラスがあります。私の TableViewController は、返された配列にアクセスしようとしています。はい、ご想像のとおり、私の tableviewcontrollerviewDidLoadメソッドは、ヘルパー クラスから返された配列オブジェクトにアクセスできません。

@interface MyHelperClass : NSObject

@property (nonatomic,retain)NSArray *myArray;

@end

@implementation MyHelperClass

@synthesize myArray;

- (NSArray *) returnArray{

 // make api calls and return array

  return myArray;

}

@end

@implementation MyTableViewController
{
- (void)viewDidLoad
{
    [super viewDidLoad];

    MyHelperClass *myhelper = [[MyHelperClass alloc]initWithPath:getSpacePath];

    allTopics = (NSArray *)[myhelper returnArray];

    NSLog(@"Load my Array%@",allTopics);
}
}

私の質問は、データを渡すためにデリゲートを実装する必要がありますか、またはデータをビューコントローラーに渡す他の方法はありますか?

PS : グローバル変数は使いたくない

4

2 に答える 2

0

返信が遅くなり申し訳ありません。私は問題が何であるかを理解しました。@A-Liveが述べたように、AFNetworkingを使用したRest API呼び出しは非同期呼び出しを使用しているため、実行時間内に配列をメインスレッドに返していません。私の場合、

-(void)viewDidLoad {

NSLog(@"I get called first");

MyHelper *helper = [[MyHelper alloc]init];

// returns array. However, [helper getData] is an async call under the hood. Hence myArray is nil
myArray = [helper getData];

}

この問題を解決するために、NSNotification を利用しました。

@implementation MyHelper{

   -(NSArray *)getData(){

    [[NSNotificationCenter defaultCenter] postNotificationName:@"some.name.notification" object:JSON];

    }
}

-(void)viewDidLoad(){

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData:) name:@"some.name.notification" object:nil];

}

-(void)loadData:(NSNotification *)notif {

// You can access the JSON object passed by the helper in here

NSArray *myArray = [notif object];

// do whatever you want with the array.

}

私は十分に詳細であることを願っています。これが誰かを助け、多くの頭痛を和らげることを願っています.

于 2013-04-17T20:40:58.700 に答える