0

JSONとrestkitについてさらに学ぶために、私が取り組んでいるプロジェクトがあります。すべてうまく機能していますが、配列の値が失われることに問題があります。

これは、ネットワーク リクエストで実行される最後のメソッドです。

SHRetrieveStoresWS.m

- (void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects
{
  self.stores = [[NSArray alloc] initWithArray:objects];
  StoresViewController *viewController = [[StoresViewController alloc] init];
  [viewController didLoadObjects:objects];


  for (Store *aStore in stores) {
      NSLog(@"%@", [aStore longName]);

  }


}

ビューコントローラーでこのメソッドを呼び出します。

StoresViewController.m

@property (strong, nonatomic) NSArray *data;


- (void)didLoadObjects:(NSArray *)aArray
{

    NSLog(@"%d", aArray.count);
    self.data = [[NSArray alloc] initWithArray:aArray];
    NSLog(@"%d", data.count);
    [self.tableView reloadData];
}

このメソッド内で値を要求すると値は正しいのですが、その直後に配列に 0 オブジェクトが表示されます。ここで何か不足していますか?

後でこのメソッドで値を確認しています。

- (IBAction)pushMe:(id)sender
{
    NSLog(@"Data: %d", self.data.count);
}
4

3 に答える 3

1

セグエでデータを渡す必要があります...

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString: @"MY_IDENTIFIER"]){
        StoresViewController *viewController = segue.destinationViewController;
        [viewController didLoadObjects: objects];
    }
}

それはあなたのために働くはずです!MY_IDENTIFIERをセグエの識別子に変更するだけです。

于 2013-03-11T04:43:19.327 に答える
0

StoresViewControllerは、宣言されたメソッド(別名objectLoader)でのみアクセス可能なローカル変数として初期化されます。objectLoaderが完了すると、ローカル変数は無効になります。

于 2013-03-11T04:07:39.253 に答える
0

問題は、ネットワーク コントローラーに元のインスタンスへの参照を与えるのではなく、StoresViewController の複数のインスタンスを作成している可能性が最も高いです。

selfで印刷し、-viewDidLoadで再度印刷することで、自分自身にそれを示すことができますdidLoadObjects:。ポインターのアドレスが異なることがわかります。

この行が原因です:

StoresViewController *viewController = [[StoresViewController alloc] init];

StoresViewController を再度インスタンス化する代わりに、プロパティを SHRetrieveStoresWS クラスに追加し、それを使用してビュー コントローラへの参照を保持します。

@property (strong) StoresViewController *viewController;

-didLoadObjects:を呼び出す前に、そのプロパティを設定する必要があります。

于 2013-03-11T03:26:37.163 に答える