核心数据一对多关系获取数据

时间:2015-04-30 13:41:04

标签: ios objective-c core-data

我将JSON数据存储为具有一对多关系的CoreData。我能够使用NSFetchRequest和快速枚举来获取数据,但数据不是我需要的顺序格式,它不能在我的UITableViewCells中使用我怎么能这样做 这是我的代码 这是我的数据模型 https://www.dropbox.com/s/1e1ujrjxtkjy9h9/Screen%20Shot%202015-04-29%20at%205.14.31%20pm.png?dl=0

_appDelegate = [[UIApplication sharedApplication]delegate];
    _managedObjectContext = [_appDelegate managedObjectContext];

    NSFetchRequest * fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"DealSection"];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"sectionID == %@",_sectionID]];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    NSArray * sortDescriptor = [NSArray arrayWithObjects:nil];
    [fetchRequest setSortDescriptors:sortDescriptor];
    NSError * error;
    NSArray * data = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
    _fetchData = data;


    for (DealSection * section in _fetchData) {
        for (Deal * deal in [section alldeals]) {
            NSLog(@"%@",[deal nameAttribute]);
        }
    }

我将所有代码放在ViewDidLoad

这里是从NSLog获取数据但我的问题是能够打印数据但是无法将数据传递到表视图

1 个答案:

答案 0 :(得分:0)

您发布的JSON代码段显示(与评论中的假设相反,道歉),每个Deal可以有多个DealSections

您的DealSection实体的关系名为alldeals,目前是一对一的关系。即每个DealSection只能有一个Deal。我认为这应该是很多的。举个例子,你发布的JSON中的交易有ID = 6(name =“Services”)和ID = 8(name =“Wellness”)的部分。假设您与ID = 6的部分有另一笔交易 - 您是否要使用与现有DealSection建立关系,或创建新的DealSection

目前,您的代码会创建一个新的DealSection,但我认为您可能希望与现有DealSection建立关系。要做到这一点,你需要

a)修改你的数据模型,使关系多了许多。

b)修改存储多对多关系数据的代码,以便通过尝试使用正确的ID获取DealSection来开始。如果找到,请将DealSection添加到交易sectionRelation。如果找不到,请创建新的DealSection并将其添加到Deal

修改

要在tableView中显示数据,您需要实现三种数据源方法:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // A table view section for each DealSection:
    return [self.fetchData count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    DealSection *dealSection = self.fetchData[section];
    NSArray *deals = [dealSection.alldeals allObjects];
    return [deals count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // Amend this identifier to match your cell prototype 
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Set up the cell...
    DealSection *dealSection = (DealSection *)self.fetchData[indexPath.section];
    NSArray *deals = [dealSection.alldeals allObjects];
    Deal *deal = (Deal *)deals[indexPath.row];
    cell.textLabel.text = deal.nameAttribute;
    return cell;
}

这是基本的表格视图,所以如果不清楚我推荐我在评论中提到的教程。