我在NSManagedObject类中有属性 firstName 和 lastName 。我需要另一个属性 uppercaseFirstLetter ,这是从这两个属性计算出来的。属性 uppercaseFirstLetter 不能是瞬态的,它将用于sectionNamedKeyPath
[[NSFetchedResultsController alloc] initWithFetchRequest: fetchRequest
managedObjectContext: [DatabaseManager context]
sectionNameKeyPath: @"uppercaseFirstLetter"
cacheName: nil];
和排序描述符
NSSortDescriptor *sortLastNameDescriptor =
[[NSSortDescriptor alloc] initWithKey: @"uppercaseFirstLetter"
ascending: YES
selector: @selector(localizedStandardCompare:)];
这是用于计算uppercaseFirstLetter:
的代码NSString *aString = nil;
NSString *lastName = [self valueForKey:@"firstName"];
NSString *firstName = [self valueForKey:@"lastName"];
if (lastName.length) {
aString = [lastName uppercaseString];
} else if (firstName.length) {
aString = [firstName uppercaseString];
} else {
aString = @"#";
}
NSString *stringToReturn = [aString substringToIndex:1];
我需要如何创建 uppercaseFirstLetter 以及代码中的哪些更改才能达到此结果?
答案 0 :(得分:1)
您可以使用firstName
和lastName
的自定义setter方法更新uppercaseFirstLetter
属性:
- (void)setFirstName:(NSString *)firstName
{
[self willChangeValueForKey:@"firstName"];
[self setPrimitiveValue:firstName forKey:@"firstName"];
[self updateUppercaseFirstLetter];
[self didChangeValueForKey:@"firstName"];
}
您还必须为lastName
执行此操作。
或者,如果需要,您可以通过KVO观察firstName
和lastName
的更改,以更新uppercaseFirstLetter
。有很多解决方案可以解决这个问题。关键字:“NSManagedObject”“KVO”
最后的解决方案可能是更优雅的方式。