在数据模型中,我有暂时属性uppercaseFirstLetterOfName,它将返回持久属性的第一个字母.我在中指定了这个属性
NSSortDescriptor* sortByWordDescriptor = [[NSSortDescriptor alloc]
initWithKey:@"subject" ascending:YES];
NSArray* sortArray = [[NSArray alloc]
initWithObjects:sortByWordDescriptor, nil];
[fetchRequest setSortDescriptors:sortArray];
NSFetchedResultsController* controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"uppercaseFirstLetterOfName"
cacheName:@"Root"];
Run Code Online (Sandbox Code Playgroud)
当我更改从fetchedresultscontroller取得的持久对象以便删除该部分时,只会controller:didChangeObject触发.但由于该部分已经消失(事实上),我预计controller:didChangeSection也会被解雇.在修改持久对象以便controller:didChangeSection调用时,我应该做些额外的事情吗?
UPD:
这是模型子类中的瞬态属性getter
- (NSString *)uppercaseFirstLetterOfName
{
[self willAccessValueForKey:@"uppercaseFirstLetterOfName"];
NSString *aString = [[self valueForKey:@"subject"] uppercaseString];
NSString *stringToReturn = [aString substringWithRange:
[aString rangeOfComposedCharacterSequenceAtIndex:0]];
[self didAccessValueForKey:@"uppercaseFirstLetterOfName"];
return stringToReturn;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我获取对象并传递给视图控制器进行修改
...
detailViewController.unit = (ModelClass*)[fetchedResultsController
objectAtIndexPath:indexPath];
...
Run Code Online (Sandbox Code Playgroud)
最后是数据修改
unit.subject = someTextField.text;
...
[unit.managedObjectContext save:&error]
Run Code Online (Sandbox Code Playgroud)
我没有任何其他特殊的瞬态对象,所以我不直接修改它.
没有看到围绕更新该瞬态属性的代码,我将不得不猜测你有一个KVO问题.你可以发布代码吗?
你有一个主题的自定义设置器吗?如果没有,您是否设置了从属密钥uppercaseFirstLetterOfName?如果没有,那么这就是你的问题.更改一个值不会触发另一个值更改.这是一个KVO情况.
NSFetchedResultsController正在观察uppercaseFirstLetterOfName它并等待它改变.它不只是在观察要改变的对象.因此,当您更改主题时,您还需要"标记" uppercaseFirstLetterOfName.最简单的方法是将以下方法添加到NSManagedObject子类中:
+ (NSSet*)keyPathsForValuesAffectingUppercaseFirstLetterOfName
{
return [NSSet setWithObject:@"Subject"];
}
Run Code Online (Sandbox Code Playgroud)
这将告诉KVO,无论何时subject财产发生变化,它都应该发出更改通知UppercaseFirstLetterOfName.
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |