相关疑难解决方法(0)

更改托管对象属性不会触发NSFetchedResultsController更新表视图

我有一个带谓词的fetchedResultsController,其中"isOpen == YES"

在调用closeCurrentClockSet时,我将该属性设置为NO.因此,它应该不再出现在我的tableView上.

出于某种原因,这种情况并没有发生.

有人可以帮我解决这个问题吗?

-(void)closeCurrentClockSet
{

    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"isOpen == YES"];

    NSArray *fetchedObjects =
        [self fetchRequestForEntity:@"ClockSet"
                      withPredicate:predicate
             inManagedObjectContext:[myAppDelegate managedObjectContext]];

    ClockSet *currentClockSet = (ClockSet *)fetchedObjects.lastObject;

    [currentClockSet setIsOpen:[NSNumber numberWithBool:NO]];

}
Run Code Online (Sandbox Code Playgroud)

-

通过调用自定义fetchRequestForEntity:withPredicate:inManagedObjectContext方法,我有更多方法,使用完全相同的方法.

在这些方法中,更改属性时,tableView会正确更新!但是这一个上面(closeCurrentClockSet),没有!我无法弄清楚为什么.

-

我对fetchedResultsController的实现来自Apple的文档.

另外,另一个细节.如果我将我的应用程序发送到后台.关闭它并重新打开,tableView显示更新应该!

我尽力在stackOverflow上关注之前的问题.没运气.我也NSLogged这个骨头.正确获取对象.这是正确的.isOpen属性正在更新为NO.但由于某种原因,我的fetchedResultsController不更新tableView.

我确实尝试过几个"锤子"解决方案,比如reloadData和调用performFetch.但那没用.或者使用它们会有意义......

编辑:抓住它,DID工作,在我的resultsController上的performFetch之后调用reloadData imediatly但是使用reloadData正在敲定一个解决方案.此外,它还会取消所有动画.我希望我的控制器自动更新我的tableView.

有人可以帮我解决这个问题吗?

任何帮助是极大的赞赏!

谢谢,

努诺

编辑:

完整的实施.

fetchedResultsController非常标准和简单.其他一切都来自Apple的文档

- (NSFetchedResultsController *)fetchedResultsController
{

    if (_fetchedResultsController) {
        return _fetchedResultsController;
    } …
Run Code Online (Sandbox Code Playgroud)

objective-c nsfetchedresultscontroller nsmanagedobject nsmanagedobjectcontext ios

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