将核心数据与图像或按钮(或除tableView之外的任何内容)一起使用

时间:2011-12-06 21:45:02

标签: ios core-data uibutton uiimage

我正在尝试构建一个使用类似以下数据模型的应用程序。我可以在tableView中做到这一点,但我想更有创意。例如,在导航控制器中,我希望有一个包含10个图像的视图(或带有图像作为背景的按钮)。

(三个实体)

实体1:众议院

  • 属性:houseName
  • 关系:人

实体2:人

  • 属性:personName
  • 关系:房子
  • 关系:儿童

实体3:儿童

  • 属性:名称
  • 属性:出生地
  • 关系:成人

关系是一对多的 属性都是字符串

person< ---->> house,children< --->> adult

在第一个视图中有图像,每个图像都分配给实体House(houseName 1,houseName 2等)。当你选择一个房子时,它会推送下一个包含5个图像的视图(链接到Person Entity(personName 1,personName2等)。当你选择PersonName时,它将推送填充了Children Entity的下一个视图。

我已经阅读了很多关于核心数据的信息,我很乐意这样做:

NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = [[managedObject valueForKey@"houseName"] description];

但非常不确定我应该从哪里开始使用和图像或按钮来执行此操作

我在考虑这样的事情:

-(id)initWithHouseViewController:(HouseViewController*)aHouseViewController house:(NSManagedObject *)aHouse{
if blah blah
self.houseViewController = aHouseViewController;
self.house = aHouse
  }return self;
}

//选择器

 -(void) showPersonView{
PersonViewController *pvc = [[PersonViewController alloc] initWithHouseViewController:self house:house];
viewDidLoad中的

{
if (house != nil) {
UIImageView *house1 = [[ UIImageView alloc.. blah blah
some kind of..  action:@selector(showPersonView)
((for each houseName in house) instead of house1, house2,)
...
}

使用viewDidLoad的任何建议,我不需要在每个图像(或按钮)中硬编码,这将使这个更容易移植。另外,如果有更好/更有创意的方法可以做到这一点,我也不会这样做。

对不起,如果这有点乱。这在我的脑海里也很混乱。

感谢您花时间阅读本文,

1 个答案:

答案 0 :(得分:1)

在这种情况下,我不会使用FetchResultController。

相反,你可以试试这个:

创建一个视图控制器,将所有房屋显示为按钮,您可以根据“房屋”计数动态创建按钮。 它看起来像这样:

 NSArray * allHouses = [Houses allObjects];
 //you can sort them if you need

[allHouses enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {


    //create the buttons as custom and you can add any image to the button
    UIButton *button....
    button
   //store the house index as the button tag, so you can get it later
    button.tag = idx;
  //add a selector to the button
   [button addTarget:self
                     action:@selector(getPersons:)
           forControlEvents:UIControlEventTouchUpInside]; 
}];

创建一个新的PersonViewController来保存这些人。视图控制器应该将房子作为参数而不是人。到达房子后,您将获得有关系的人员。

现在添加此方法以获取:

  -(void)getPersons(UIButton*)sender{
        NSInteger *tag = sender.tag;
         House * house = (House*)[allHouses objectAtIndex:tag];

        PersonViewController *pvc = [[PersonViewController alloc] init];
          pvc.house = house;
         [self.navigationController pushViewController.....];

}

在人员视图控制器中,您可以获取所有人或获取请求,或者只需使用:

         NSArray *allPersons = [house.person all objects];

再次创建人物按钮与第一个视图控制器相同。

使用Children视图控制器重新获得相同的过程。

GoodLuck

沙尼