gpt4 book ai didi

ios - 如何在核心数据上实现 transient 属性?

转载 作者:行者123 更新时间:2023-12-01 15:54:52 25 4
gpt4 key购买 nike

我有一个名为国家/地区的核心数据实体。该实体有一个名为 nameOfCountry 的字段,其中包含英文国家/地区名称。我需要将其本地化为其他语言,因此我创建了一个名为 nameOfCountryLocalized 的临时属性。

在 Countries 类上我正在导入这个类别

国家+NameOfCountryLocalized.h

#import "Countries.h"

@interface Countries (NameOfCountryLocalized)


@property (nonatomic, strong) NSString * nameOfCountryLocalized;


@end

国家+NameOfCountryLocalized.m

#import "Countries+NameOfCountryLocalized.h"
#import "Countries.h"

@implementation Countries (NameOfCountryLocalized)

@dynamic nameOfCountryLocalized;


-(NSString *) nameOfCountryLocalized {
[self willAccessValueForKey:@"nameOfCountryLocalized"];
NSString *nameLocalized = NSLocalizedString(self.nomePais, nil);
[self didAccessValueForKey:@"nameOfCountryLocalized"];
return nomeLocalizado;
}

-(void)setNameOfCountryLocalized:(NSString *) nameLocalized {
[self willChangeValueForKey:@"nameOfCountryLocalized"];
[self setNomePaisLocalizado:];
[self didChangeValueForKey:@"nameOfCountryLocalized"];
}

@end

当我尝试从 tableViewController 访问 nameOfCountryLocalized 时

- (NSFetchedResultsController *)fetchedResultsController {

if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Countries" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"nameOfCountryLocalized" ascending:YES];
[fetchRequest setSortDescriptors:@[sort]];

[fetchRequest setFetchBatchSize:20];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:@"Root"];

_fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;

return _fetchedResultsController;

}

我看到这个错误:在实体中找不到 keypath nameOfCountryLocalized

有什么线索吗?

最佳答案

NSFetchedResultsController 不能按 transient 属性排序。 FRC 将排序 应用于底层 SQL 存储。使用 transient 属性,FRC 可以将提取的结果分组到多个部分。此 group 是通过将 transient 属性分配给 sectionNameKeyPath 创建的。

一旦数据增长,将所有实体拉入一个数组将变得很痛苦。 FRC 确实为更大的数据集提供了很好的支持,您真的不想失去它。

假设您的用户不经常切换语言,您可能会觉得不错。如果是这种情况,我建议您将本地化的国家/地区名称作为“正常”属性写入商店,FRC 可以对该属性进行排序。尽管当用户确实切换语言时,您将需要更新所有 Country 实体。

关于ios - 如何在核心数据上实现 transient 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151975/

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