Ios 核心数据-NSManagedObject返回零
我在Ios 核心数据-NSManagedObject返回零,ios,core-data,nsfetchrequest,swift2.2,Ios,Core Data,Nsfetchrequest,Swift2.2,我在Appdelegate类中编写了两个独立的函数fetchRecords和displayRecordsfetchRecords函数将从实体中提取所有记录,并且工作正常。displayRecords函数接受fetchRecords函数的返回值,并逐个打印所有记录 我有一个视图控制器,它调用这两个函数来执行所需的任务。我的问题是result.displayRecords中的count显示获取的记录中可用的记录总数。逐个打印记录时,该值为零 override func viewDidLoad() {
Appdelegate
类中编写了两个独立的函数fetchRecords
和displayRecords
fetchRecords
函数将从实体中提取所有记录,并且工作正常。displayRecords
函数接受fetchRecords
函数的返回值,并逐个打印所有记录我有一个视图控制器,它调用这两个函数来执行所需的任务。我的问题是
result.displayRecords
中的count
显示获取的记录中可用的记录总数。逐个打印记录时,该值为零
override func viewDidLoad() {
super.viewDidLoad()
let fetchedRecords = AppDelegate().fetchRecords(fromEntity: "Dashboard")
AppDelegate().displayRecords(fromFetchedRecords: fetchedRecords)
}
下面是在AppDelegate类中编写的fetchRecords
和displayRecords
函数
func fetchRecords(fromEntity entity:String) -> Array<AnyObject> {
var fetchedResult:Array<AnyObject> = []
let fetchRequest = NSFetchRequest()
let entityDescription = NSEntityDescription.entityForName(entity, inManagedObjectContext: self.managedObjectContext)!
fetchRequest.entity = entityDescription
do{
fetchedResult = try self.managedObjectContext.executeFetchRequest(fetchRequest)
}catch{
let fetchError = error as NSError?
print(fetchError!)
}
return fetchedResult
}
func displayRecords(fromFetchedRecords result:Array<AnyObject>) {
print("Total records:\(result.count)")
if (result.count > 0) {
for data in result {
let dashboard = data as! NSManagedObject
print("Value: \(dashboard.valueForKey("count"))")
}
}
}
func fetchRecords(fromtentity:String)->数组
我也将分享数据插入代码
func saveDashBoardData(dictionary: Dictionary<String, String>) {
print(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask))
//Create Manage Object
let entityDescription: NSEntityDescription = NSEntityDescription.entityForName("Dashboard", inManagedObjectContext: self.managedObjectContext)!
for data in dictionary {
let dashboardObject = Dashboard(entity: entityDescription,insertIntoManagedObjectContext: self.managedObjectContext)
dashboardObject.type = data.0
dashboardObject.count = data.1
do {
try self.managedObjectContext.save()
print("Data saved succesfully")
}
catch {
print(error)
}
}
}
func保存仪表板数据(字典:字典){
打印(NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory,inDomains:.UserDomainMask))
//创建管理对象
让entityDescription:NSEntityDescription=NSEntityDescription.entityForName(“仪表板”,在managedObjectContext:self.managedObjectContext中)!
查找字典中的数据{
让dashboardObject=Dashboard(实体:entityDescription,insertIntoManagedObjectContext:self.managedObjectContext)
dashboardObject.type=data.0
dashboardObject.count=数据。1
做{
请尝试self.managedObjectContext.save()
打印(“成功保存数据”)
}
抓住{
打印(错误)
}
}
}
试试这个
let dashboard = Dashboard as! NSManagedObject
print("Value: \(dashboard.count)")
我想这可能有用。因为您已将ManagedObject设置为数据。你最好把它当作一种仪表盘。这样,您就可以通过仪表板obj.count访问计数
希望您为实体创建了核心数据NSManagedSubclass
希望它能帮助..从coredata模型创建Dashboard的NSManagedObject子类
func displayRecords(fromFetchedRecords result:Array<AnyObject>) {
print("Total records:\(result.count)")
if (result.count > 0) {
for data in result {
let dashboard = data as! Dashboard
print("Value: \(dashboard.valueForKey("count"))")
}
}
}
func displayRecords(来自fetchedRecords结果:数组){
打印(“总记录:\(result.count)”)
如果(result.count>0){
查询结果中的数据{
让dashboard=数据为!dashboard
打印(“值:\(dashboard.valueForKey(“计数”)))
}
}
}
这里的关键更改是让dashboard=数据为!仪表板
Dashboard是托管对象子类,您需要使用核心数据模型帮助创建它 问题在于AppDelegate()
总是创建一个与应用程序的“硬编码”委托实例不同的类的新实例
你必须写作
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let fetchedRecords = appDelegate.fetchRecords(fromEntity: "Dashboard")
appDelegate.displayRecords(fromFetchedRecords: fetchedRecords)
由于您已创建了NSManagedObject
的自定义子类,请将其用作类型,而不是NSManagedObject
或–更糟的是–未指定的AnyObject
。它使许多事情变得更容易:
func fetchRecords(fromEntity entity:String) -> [Dashboard] {
let fetchRequest = NSFetchRequest()
let entityDescription = NSEntityDescription.entityForName(entity, inManagedObjectContext: self.managedObjectContext)!
fetchRequest.entity = entityDescription
do {
return try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [Dashboard]
} catch let fetchError as NSError {
print(fetchError!)
}
return [Dashboard]()
}
func displayRecords(fromFetchedRecords result:[Dashboard]) {
print("Total records:\(result.count)")
for dashboard in result { // the check for empty is not needed
print("Value: \(dashboard.count)")
}
}
你能给我看看你项目中的coredata模型吗@sindhu jaI已经分享了问题中的数据模型。请找到它我听不懂你想说什么@vadian@sindhuja:你能在let dashboard=data as上加一个断点吗!NSManagedObject并确认仪表板对象是否为零??我想如果它是零,它不会在那一点上崩溃。这意味着您的获取请求是正确的fecthing dashboard对象,但可能是dashboard对象在count:)中没有属性值,所以您可以做的是发布将dashboard对象插入到中的代码coredata@SandeepBhandari插入工作正常,我可以在DB中看到数据。无论如何,我将共享代码。是的,我已经为该实体创建了NSManagedSubclass。我试过你的建议,但也没用。谢谢@vadian。为AppDelegate
创建实例解决了这个问题。对AppDelegate使用紧密耦合是不好的,会给您带来更多的麻烦。您最好遵循最近在中列出的设计,而不是模板中的设计。谢谢@Dovakin。我们使用了您的建议,并为AppDelegate
创建了一个实例,解决了这个问题。