【问题标题】:Core Data with multiple viewControllers具有多个视图控制器的核心数据
【发布时间】:2012-01-16 02:11:40
【问题描述】:

我很难让核心数据在我的应用程序中工作。我对表格视图控制器中的核心数据非常满意,甚至对单视图应用程序中的核心数据也很满意。但是,我无法让我的程序在多个视图控制器中正常运行。

我已经阅读了 Zarra 的核心数据手册并购买了 iOS 的专业核心数据,并浏览了列出的项目,但每个项目都在 TableView 控制器中使用。 iOS 专业核心数据中的形状应用程序除外。

有谁知道任何示例(代码或教程)可以演示如何使用多个视图控制器和核心数据编写程序?

我想做的是在第一个(而不是 tableview 单元格)上有按钮,这些按钮将连接到下一个 viewController。在第二个视图控制器上,我希望使用来自第一个实体集的信息填充该信息,

所以到目前为止我有这样的东西,第一个实体是:

房子

  • houseName(属性)
  • 住户(关系)

  • 人名(属性)
  • 家庭(关系)

居住者>家庭(一对多)

{
...
int i = //house selected on previous view controller;
NSManagedObject *people = [[self sortOccupants] objectAtIndex:i];
textField01.text = [NSString stringWithFormat:@"%@",[[people valueForKey:@"personName"]description]];
}

排序占用者如下所示:

-(NSArray *)sortOccupants
{
NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];
return [[(NSSet *)[house valueForKey:@"occupants"] allObjects] sortedArrayUsingDescriptors:sortDescriptors];
}

任何想法都会很棒,但如果你能指出我能证明这一点的示例代码,我将不胜感激。

谢谢,

【问题讨论】:

    标签: ios core-data uiviewcontroller


    【解决方案1】:

    我的方法是为您的实体生成 NSManagedObject 子类(使其更具可读性和类型安全性)。

    然后,我将在第二个视图控制器中创建一个新的 init 方法。 initWithHouse:(House *)house 什么的:

    @property (nonatomic, strong) House  * currentHouse;
    @property (nonatomic, strong) NSArray * sortedOccupants; // Array of People objects
    
    -(id) initWithHouse:(House *)house
    {
      if (self = [super init])
      {
          // Managed Object Context available from [currentHouse managedObjectContext]
          currentHouse = house;
          sortedOccupants = [self sortOccupants:house.occupants];
      }
      return self;
    }
    
    -(NSArray *)sortOccupants: (NSSet *)occupants
    {
        NSSortDescriptor *sortPeopleInHouse = [[NSSortDescriptor alloc] initWithKey:@"personName" ascending:YES];
        NSArray *sortDescriptors = [NSArray arrayWithObjects:sortPeopleInHouse, nil];
    
        return [occupants allObjects] sortedArrayUsingDescriptors:sortDescriptors];
    }
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢,这是有道理的,我已经采取了不同的方式并使用了基于 2011wwdc 故事板视频的故事板建议。但这有助于为我指出我需要去弄清楚如何让它工作的方向。谢谢
    • 查看 mogenerator 以帮助您创建 CoreData 类,包括在您更改 CD 模型时不会被破坏的子类。
    【解决方案2】:

    也许关键是每个视图控制器都应该有

    @property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
    

    在其标题中。

    在你推送一个视图控制器之前,你给它一个托管对象上下文。在这个新的视图控制器中,您可以使用典型的方法来搜索和保存上下文。

    您从一个主页视图控制器开始,它实际上是一个人员列表。您选择一个人并启动一个人视图控制器。您应该将托管对象上下文和 Person 实例传递给此人员视图控制器。

    【讨论】:

    • 感谢您的输入,就像其他答案一样,帮助我意识到我需要更多地研究核心数据和故事板。
    猜你喜欢
    • 2021-07-15
    • 2017-06-10
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多