IOS/XCODE:在其他类中调用 NSFetchedResultsController 方法

Posted

技术标签:

【中文标题】IOS/XCODE:在其他类中调用 NSFetchedResultsController 方法【英文标题】:IOS/XCODE: Calling NSFetchedResultsController Method in Other Class 【发布时间】:2015-04-21 02:20:42 【问题描述】:

我在 tableview 中有一个 NSFetchedResultsController,我试图从另一个控制器调用它,但出现错误。

我将 tableVC 导入到 otherVC 中,但得到“选择器“fetchedResultsController”的未知类方法。谁能发现我做错了什么?谢谢。

code in tableVC.h
-(NSFetchedResultsController *)fetchedResultsController;
tableVC.m
-(NSFetchedResultsController *)fetchedResultsController 
    if (_fetchedResultsController==nil)
        NSFetchRequest *fetchRequest= [[NSFetchRequest alloc] init];
        ...
    return _fetchedResultsController;

otherVC.m
#import "tableVC.h"

  [tableVC fetchedResultsController];

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

“No known class method for selector”表示你调用的是类方法,而不是实例方法。

类方法用前导+号定义,而你tableVC.h中的fetchedResultsController用前导-号定义,表示它是一个实例方法。

解决方法是将tableVC.h 中fetchedResultsController 的方法签名更改为类方法,或者将otherVC.m 中的调用更改为使用tableVC 的实例而不是类本身。

根据您的代码示例,看起来 fetchedResultsController 方法被正确定义为实例方法,因此您需要在 otherVC 类中使用 tableVC 的实例。

【讨论】:

好的。正在做 tableVC *tableVC = nil; [tableVC fetchedResultsController];似乎得到了触发的方法,所以我已经正确标记了问题。但是,有没有办法将 FRC 设置为 nil,以便我可以重新加载它。它延迟加载,但由于它已经存在,它不会重新获取。 一般来说,如果你的 NSFetchedResultsController 是非跟踪的(没有分配委托),并且你没有改变谓词,也没有设置缓存,那么你需要做的就是调用 [ fetchedResultsController performFetch] 之后调用表视图 [self.tableView reloadData] 上的 reloadData。如果您使用缓存,请查看 [NSFetchedResultsController deleteCacheWithName:cacheName]。我还建议您研究设置委托并使用跟踪,以便表格视图在您的模型发生更改时始终保持最新。 一个表 VC 已注册为委托,并在您添加新项目时更新,但由于某种原因,尽管保存代码相同,但在您编辑项目时它不会更新。另外,有问题的detail VC没有表格,只有标签和图片。我无法让这些刷新。了解 MVC 的价值,但令人抓狂的是,如此微不足道的事情在 ios 中却如此复杂。 使用 Core Data 支持的 UITableViews 让一切正常工作肯定有一些细微差别。如果不查看您的代码,将很难帮助您解决特定问题。您可能会发现查看带有 UITableViews 的 Core Data 的完整示例很有用,例如来自 Apple 的 this one。 也许有一个单独的模态编辑控制器是一个错误。您发送给我的示例使用详细视图进行编辑。也许这就是苹果想要的。事实证明,如果不通过 tableview 并首先准备好继续详细信息,就无法从托管对象上下文中更新详细信息视图。

以上是关于IOS/XCODE:在其他类中调用 NSFetchedResultsController 方法的主要内容,如果未能解决你的问题,请参考以下文章

ios/xcode/objective c:设置和获取会话变量[重复]

iOS XCode - 可以从 SpringBoard 隐藏其他应用程序吗?

使用函数调用将宽度约束设置为 UIView 不再起作用。 iOS ( Xcode 12.0.1 )

MFMailComposeViewController Delegate 没有在其他类中被调用 swift 4

可以在 IOS 8 (Xcode 6) 模拟器中测试应用内购买吗?

在类中,我可以在另一个方法中调用其他方法变量吗?