0

假设我的项目中有 3 个文件:

  1. 数据模型文件,处理核心数据和获取信息
  2. 视图控制器 1
  3. 视图控制器 2

在模型文件中,我得到结果如下:

- (NSArray *) getColonyData
{
NSManagedObjectContext *cxt = [self managedObjectContext];
NSEntityDescription *colonyDesc = [NSEntityDescription entityForName:@"Colony" inManagedObjectContext:cxt];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:colonyDesc];

NSError *error;
NSArray *colonyResults = [cxt executeFetchRequest:request error:&error];

return colonyResults;
}

我在第一个 viewController 的 viewDidLoad 部分运行这部分代码,我得到了正确的结果:

  NSArray *colonyResults = [model getColonyData];
    if (colonyResults != nil)
    {
        colonyName.text = [[colonyResults objectAtIndex:0] valueForKey:@"name"];
    }
    else
    {
        colonyName.text = @"nothing setup yet";
    }

然后,当我执行完全相同的代码(当然更新不同的 UI 元素)时,我通过 segue 移动到第二个 viewController。但这一次结果是 nil。我在这里做错了什么?我应该先手动发布结果吗?没有出现其他错误。谢谢。

4

1 回答 1

0

正如评论中所建议的:

experimentModel *model;不分配任何东西;它只是声明一个变量存在。在某个地方,您必须将模型设置为第一个控制器的实际对象(并且可能不会为第二个控制器这样做)。

向 nil 对象发送消息是一种无法获得预期结果的常见方法。:)

于 2012-09-12T14:32:50.760 回答