gpt4 book ai didi

ios - 行中子对象的 NSFetchRequest

转载 作者:行者123 更新时间:2023-12-01 15:45:18 28 4
gpt4 key购买 nike

我的数据模型如下:类别

—>名字

—>items(“汽车”类型的项目数组)

我正在尝试获取部分作为名称,行应该是项目(这是一个 NSArray)

这是我的代码,我期望将行作为 Car 返回,但它仍然返回“Category”。那么,什么是 NSFetchRequest?

NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:@"Categories"];


NSSortDescriptor *sortDesc=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDesc]];

fetchController=[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:delegate.managedContext sectionNameKeyPath:@"name" cacheName:nil];
NSError *fetchError;
[fetchController performFetch:&fetchError];

我附上了模型的图片。

enter image description here

取车代码如下。

AppDelegate *del=(AppDelegate*)[UIApplication sharedApplication].delegate;
NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:@"Car"];


NSSortDescriptor *sortDesc=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDesc]];

fetchController=[[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:del.managedContext sectionNameKeyPath:@"Categories.name" cacheName:nil];
NSError *fetchError;
[fetchController performFetch:&fetchError];

代码在这里上传https://www.dropbox.com/s/jjk0nve3pmytui2/TestAppData%202.zip

注意:- 我正在考虑显示空白部分,因为我可以查看带有“添加”按钮的标题。这样,用户就可以很容易地知道类别的数量。

为了实现上面“注意”中提到的事情,我尝试了以下方法。我创建了一个 CarViewController2。它创建的部分数量与类别数量相同,但行数取决于 categoriesRelationship(这是一个 NSOrderedSet)。可以通过取消注释 ViewController.m 的 (IBAction) addCategory:(id) sender 中的一些代码进行测试以进行测试。 (取消注释一次,然后再注释)代码已更新,可以下载。

如果需要,请更正代码。谢谢。

最佳答案

您的设置应该是:

NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:@"Car"];
NSSortDescriptor *sortDesc=[[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDesc]];

fetchController=[[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:delegate.managedContext
sectionNameKeyPath:@"category.name"
cacheName:nil];

category.name 假设 Category items 的反向关系是 Car category(一对多关系)

请注意,您可能希望更改排序描述符以按某些 Car 属性

排序

编辑:

发布模型和当前代码后,您不能按类别 名称分割数据,因为它是多对多关系。
不同部分不能有重复的项目。

如果 Car 'c' 属于类别 'g1' 和 'g2',您要么需要自己构建数据结构,要么引入一个连接汽车和类别的中间实体,它将是请求将基于的那个。

编辑 2:

在您的项目中,您将 carRelation 设置为一对一到 Categories 实体,这将允许您形成以下请求:

NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:@"Car"];
NSSortDescriptor *sortDesc=[[NSSortDescriptor alloc] initWithKey:@"carName" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDesc]];

fetchController=[[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:delegate.managedContext
sectionNameKeyPath:@"carRelation.categoryName"
cacheName:nil];

这仍然不会显示其中没有汽车的类别(因为它应该有汽车 View 和类别 View )。

编辑 3:

CarViewController.m 的代码更正:

-(void) getData{
AppDelegate *del=(AppDelegate*)[UIApplication sharedApplication].delegate;
NSFetchRequest *req=[[NSFetchRequest alloc] initWithEntityName:@"Car"];
NSSortDescriptor *descriptor1=[[NSSortDescriptor alloc] initWithKey:@"carRelationship.categoryName" ascending:YES];
NSSortDescriptor *descriptor2=[[NSSortDescriptor alloc] initWithKey:@"carName" ascending:YES];
[req setSortDescriptors:@[descriptor1,descriptor2]];
fetchController=[[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:del.managedContext sectionNameKeyPath:@"carRelationship.categoryName" cacheName:nil];
NSError *fetchError;
fetchController.delegate=self;
[fetchController performFetch:&fetchError];
NSLog(@"Fetch ERROR= %@",fetchError);
}

- (NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
id<NSFetchedResultsSectionInfo> sectionInfo=[[fetchController sections] objectAtIndex:section];
return [sectionInfo name];
}

正如我之前解释的,这仍然不会显示其中没有汽车的类别

关于ios - 行中子对象的 NSFetchRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319513/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com