相关疑难解决方法(0)

使用NSFetchedResultsController动态创建节

我正在使用NSFetchedResultsController(NSFRC)来显示信息UITableView.我正在尝试为用户创建选项,以便按部分而不是按字母顺序对单元格进行排序.问题是,然后将使用下载的信息确定这些部分.除此之外,每个项目的部分将相对经常更改,因此我不想保存该部分.在我对类似问题的研究中,我注意到了瞬态属性的提及,但是在我不确定是否可以使用它们之前我从未使用它们,因为一旦数据已经加载,所有计算都完成了,我也希望这个解决方案与我以前的解决方案兼容Core Data database.我也不是特别擅长Core Data,(也不Objective-C是那个!)所以我不完全确定我会怎么做.

所以,如果我们使用瞬态属性,这就是我想要的(下一位是理论上的,因为我不知道瞬态属性是否是正确的前进方式).我想要4个可能的部分,0-3(我将使用它TableView delegate来重命名它们以解决排序问题).完成计算后,将为每个单元分配瞬态属性(如果需要,默认部分为2).我希望这一切都有道理.

对,现在为一些理论代码.首先,我在数据模型屏幕中创建瞬态属性,并通过检查瞬态复选框使其瞬态...听起来很简单.

在计算代码中willDisplayCell(由于几个原因需要在wDC中完成),实体可以像这样保存:

MyEntity *myEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];

myEntity.sectionTransientProperty = 2;

if (![self.managedObjectContext save:&error]) {
    NSLog(@"Error: %@", error);
    FATAL_CORE_DATA_ERROR(error);
    return;
}  
Run Code Online (Sandbox Code Playgroud)

做完了吧?那是我们如何为瞬态属性赋值?

然后我在分配它时更改NSFRC中的排序选项:

fetchedResultsController = [[NSFetchedResultsController alloc]
                                initWithFetchRequest:fetchRequest
                                managedObjectContext:self.managedObjectContext
                                sectionNameKeyPath:@"sectionTransientProperty"
                                cacheName:@"MyEntity"];
Run Code Online (Sandbox Code Playgroud)

我们怎么样,还需要做什么?或者我有这么可怕的错误我应该放弃Core Data and NSFRC?如果你们可以帮助引导我通过这个我真的很感激.如果您需要我发布更多代码,我将很乐意.

问候,
迈克

objective-c ios

13
推荐指数
1
解决办法
1万
查看次数

在实体中找不到Keypath <transientproperty>

我想在表视图的节头中显示格式化日期.

我使用了以下代码.但它抛出异常*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath dateSectionIdentifier not found in entity <NSSQLEntity Expense id=1>'.

猜测添加排序描述符时会出现异常.

NSMutableArray *sortDescriptors = [[NSMutableArray alloc] initWithCapacity:20];
NSSortDescriptor *mainSortDescriptor = [[NSSortDescriptor alloc] initWithKey:dateSectionIdentifier ascending:NO];
[sortDescriptors addObject:mainSortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

//Expense.h

NSString *dateSectionIdentifier;
Run Code Online (Sandbox Code Playgroud)

//Expense.m

@dynamic dateSectionIdentifier

-(NSString *)dateSectionIdentifier{
[self willAccessValueForKey:@"dateSectionIdentifier"];
NSString *tempDate = [self primitiveDateSectionIdentifier];
[self didAccessValueForKey:@"dateSectionIdentifier"];
if(!tempDate){
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    [dateFormatter setDateFormat:@"d MMMM yyyy"];
    tempDate = [dateFormatter stringFromDate:[self date]];
    [self setPrimitiveDateSectionIdentifier:tempDate];
    [dateFormatter release];
}
return tempDate;

}
Run Code Online (Sandbox Code Playgroud)

core-data objective-c nssortdescriptor ios

11
推荐指数
1
解决办法
5396
查看次数

NSFetchedResultsController部分已本地化排序

我如何使用带有翻译排序键和sectionKeyPath的NSFetchedResultsController?

问题:我在数据库中的属性"type"中有ID,如typeA,typeB,typeC,...而不是直接值,因为它应该是本地化的.在英语中,类型A = Bird,typeB = Cat,typeC = Dog in German,它将是Vogel,Katze,Hund.

使用带有排序键的NSFetchedResultController和"type"上的sectionKeyPath,我收到订单和部分 - typeA - typeB - typeC

接下来我翻译显示,一切都很好用英语: - 鸟 - 猫 - 狗

现在我切换到德语并收到错误的排序顺序 - Vogel - Katze - Hund

因为它仍然按typeA,typeB,typeC排序

所以我正在寻找一种方法来本地化NSFetchedResultsController的排序.

我尝试了瞬态属性方法,但这对排序键不起作用,因为排序键需要在实体中.

我没有其他想法.但我不敢相信在本地化所需的派生属性上使用NSFetchedResultsController是不可能的?

有一些相关的讨论,如使用NSFetchedResultsController的自定义部分?但不同的是自定义部分名称和排序键可能具有相同的顺序.不是我的情况,这是主要的区别.

最后,我想在派生属性上需要一个必要的NSSortDescriptor排序顺序.此排序顺序还可用于sectionKeyPath.

谢谢你的任何提示.

iphone nsfetchedresultscontroller

7
推荐指数
1
解决办法
2395
查看次数