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

你应该在segue中传递数据......

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

那应该对你有用!只需将 MY_IDENTIFIER 更改为您的 segue 的标识符。

于 2013-03-11T04:43:19.327 回答
0

问题很可能是您正在创建多个 StoresViewController 实例,而不是为您的网络控制器提供对原始实例的引用。

self您可以通过在 中-viewDidLoad反复打印来向自己展示它didLoadObjects:。您会看到指针地址不同。

这条线是罪魁祸首:

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

无需再次实例化 StoresViewController,而是向您的 SHRetrieveStoresWS 类添加一个属性并使用它来保存对您的视图控制器的引用。

@property (strong) StoresViewController *viewController;

您需要在-didLoadObjects:调用之前设置该属性。

于 2013-03-11T03:26:37.163 回答
0

StoresViewController 被初始化为一个局部变量,它只能在它被声明的方法(又名 objectLoader)中访问。objectLoader 完成后,局部变量不再有效。

于 2013-03-11T04:07:39.253 回答