我遇到了我认为是缺陷的东西,但我不确定它是否在我的代码中,还是在 RubyMotion 中,还是在 iOS 中......
"标签"模型:
class Tag < CDQManagedObject
def sectionIdentifier
puts "Called"
name ? name[0] : " "
end
def keyPathsForValuesAffectingSectionIdentifier
NSSet.setWithObject("name")
end
end
我的控制器视图的一部分DidLoad 方法:
self.query = Tag.sort_by(:name)
self.tags_results = NSFetchedResultsController.alloc.initWithFetchRequest(self.query.fetch_request, managedObjectContext: cdq.contexts.current, sectionNameKeyPath: "sectionIdentifier", cacheName: nil)
self.tags_results.delegate = self
puts tags_results.sections.inspect
问题是,tags_results节是零的。 我这里有点问题,但我不确定在哪里。
嗯...
我以前从未使用过红宝石,所以不是100%确定。
但是,如果这就是您使用的所有代码,那么我想我看到了问题。
创建NSFetchedResultsController
,您为其提供请求、部分标识符等...
但是,您并没有告诉控制器实际运行提取。
在Objective-C
我会做...
[fetchedResultsController performFetch:nil];
这告诉控制器去实际获得结果。
只有这样,才会填充部分属性。
sections
属性是实际获取对象的数组,因此如果不获取它们,它将始终为零。
编辑
是的。。。
从文档中...http://www.rubymotion.com/developer-center/api/NSFetchedResultsController.html#performFetch%3A-instance_method
你需要运行...
self.tags_results.performFetch(nil)
// or whatever the syntax is