使用Swift和XCode将整数存储在核心数据中

尼克·格米

虽然Strings看起来不错,但在将Integer存储到Core Data中时遇到了一些麻烦。遵循教程并阅读可用的信息似乎对没有Objective-C背景的人没有帮助。(Swift似乎是一种直截了当的语言,例如我精通PHP / OOPHP / JavaScript / VBScript / ...的语言,因此我开始使用它,到目前为止,几乎可以完成我想要的一切)

我现在想做的是,接收JSON数据并将其存储到Core Data中

这是我的核心数据

Entity name: Category

其属性:

id Int16
title String
description String

我的Swift模型?文件:Category.swift

import CoreData

class Category: NSManagedObject {
    @NSManaged var id: Int //should I declare this as Int16?
    @NSManaged var title: String
    @NSManaged var description: String
}

我正在使用SwiftyJASON扩展?和NSURLSession协议?获取数据并将其解析如下:

import UIKit
import CoreData

class ViewController: UIViewController {

    let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext

    override func viewDidLoad() {
        super.viewDidLoad()
        fetchData()
    }
        func fetchData() {
            var url = NSURL.URLWithString("http://domain.com/index.php?r=appsync/read&id=category")
            var session = NSURLSession.sharedSession()
            session.dataTaskWithURL(url, completionHandler: {(data, response, error) in
                // parse data into json
                let json = JSONValue(data)
                let entityDescription = NSEntityDescription.entityForName("Category", inManagedObjectContext: self.managedObjectContext)
                let category = Category(entity: entityDescription, insertIntoManagedObjectContext: self.managedObjectContext)
                for item in json.array! {
                    category.id = item["id"].string!.toInt()! //goes KABOOM!
                    category.title = item["title"].string!
                    category.description = item["description"].string!
                    managedObjectContext?.save(nil)
                }
                dispatch_async(dispatch_get_main_queue()) {
                    // do something
                }
            }).resume()
        }
}

假设JASON数据为:

[{"id":"1","title":"cat1","description":"blabala one"},{"id":"2","title":"cat2","description":"blabala two"}]

在说category.id = item["id"].string!.toInt()!xCode转到KABOOM的行中,我在这里做错了什么?

注释/更多问题:

  • 我尝试将Core Data中的id类型更改为Int32,然后在模型中将其声明为Int(而不是Int16或Int32),这减少了一些错误,但xCode仍然崩溃

  • 可能我循环工作的方式并不是执行此操作的最佳方法,一次将数据数组存储到核心数据中的更好方法是什么?

  • 我见过的大多数教程都没有实体(表)的ID,我在这里缺少什么吗?

参考文献:

编辑>工作代码:

可以使用File> New> File> iOS> Core Data> NSManagedObject子类自动生成的Category.swift模型文件[swift,无需桥接头,但您需要手动添加@objc行,如下所示]

import CoreData

@objc(Category) //Wouldn't work without this
class Category: NSManagedObject {
    @NSManaged var id: NSNumber //has to be NSNumber
    @NSManaged var title: String
    @NSManaged var mydescription: String //"description" is reserved so is "class"
}

ViewController.swift

import UIKit
import CoreData

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        fetchData()
    }
    func fetchData() {
        var url = NSURL.URLWithString("http://domain.com/index.php?r=appsync/read&id=category")
        var session = NSURLSession.sharedSession()
        session.dataTaskWithURL(url, completionHandler: {(data, response, error) in
            let json = JSONValue(data)
            let managedObjectContext = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext //this line had to be moved here
            let entityDescription = NSEntityDescription.entityForName("Category", inManagedObjectContext: managedObjectContext)
            for item in json.array! {
                let category = Category(entity: entityDescription, insertIntoManagedObjectContext: managedObjectContext) //this line has to be in inside for loop
                category.id = item["id"].string!.toInt()!
                category.title = item["title"].string!
                category.mydescription = item["description"].string!
                managedObjectContext?.save(nil)
            }
            dispatch_async(dispatch_get_main_queue()) {
                // do something
            }
        }).resume()
    }
}

样本获取数据代码:

func requestData() {
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context:NSManagedObjectContext = appDel.managedObjectContext!
    var request = NSFetchRequest(entityName: "Category")
    request.returnsObjectsAsFaults = false
    var results:NSArray = context.executeFetchRequest(request, error: nil)
    //println(results)
    for category in results {
        var cat = category as Category
        println("\(cat.id),\(cat.title),\(cat.mydescription)")
    }
}

PS确保更改模型后清理项目并从模拟器中删除应用程序

杰尔图顿

在当前的Swift beta(5)中,核心数据中的标量类型(整数,浮点数,布尔值)被破坏了。使用NSNumber作为属性,并提交雷达。

object.intProperty = NSNumber(int:Int(item["id"] as String))

(在电话上键入内容,对不起,如果错了,我知道这是令人作呕的代码-因此,提起雷达!)

或者,在您的特定情况下,查看JSON,请使用String。这些ID还是以字符串形式输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将UITableViewCell信息存储到核心数据中,而无需使用xcode 5

来自分类Dev

我如何使用存储的整数属性对核心数据中的数组进行排序?

来自分类Dev

在核心数据中存储Swift值类型

来自分类Dev

如何在核心数据中存储数组(Swift)

来自分类Dev

iOS Swift-如何使用核心数据存储数组?

来自分类Dev

Swift无法在Xcode测试中测试核心数据吗?

来自分类Dev

Swift中的核心数据

来自分类Dev

在核心数据中存储和获取NSMutableArray

来自分类Dev

将NSMeasurement或NSUnit存储在核心数据中

来自分类Dev

将NSDate保存在核心数据XCode 5.0中

来自分类Dev

如何使用swiftui将文本字段存储到核心数据中

来自分类Dev

Swift核心数据:核心数据中的枚举

来自分类Dev

Swift核心数据问题(Xcode 6)

来自分类Dev

Swift核心数据问题(Xcode 6)

来自分类Dev

xcode / ios:如何将映像保存到磁盘并将名称存储在核心数据中

来自分类Dev

将Mantle与核心数据结合使用-NSSet和NSArray

来自分类Dev

是否可以在iOS 9和10上同时使用核心数据(Xcode 8和Swift 3.0)?

来自分类Dev

在核心数据中存储CLLocationCoordinates

来自分类Dev

在核心数据中存储UIColor对象

来自分类Dev

核心数据使用Swift保存数据

来自分类Dev

使用向导将实体保存到核心数据中

来自分类Dev

iOS Swift-在文档目录中存储uiimage并在核心数据中存储路径

来自分类Dev

iOS Swift-在文档目录中存储uiimage并在核心数据中存储路径

来自分类Dev

核心数据,NSNumber,整数32和整数64

来自分类Dev

Swift 3中的新核心数据

来自分类Dev

核心数据中的Swift元组

来自分类Dev

在SwiftUI中,如何使用核心数据将触摸ID存储为人员/班级的属性并进行记录?

来自分类Dev

使用Swift检索核心数据

来自分类Dev

使用Swift检索核心数据

Related 相关文章

  1. 1

    将UITableViewCell信息存储到核心数据中,而无需使用xcode 5

  2. 2

    我如何使用存储的整数属性对核心数据中的数组进行排序?

  3. 3

    在核心数据中存储Swift值类型

  4. 4

    如何在核心数据中存储数组(Swift)

  5. 5

    iOS Swift-如何使用核心数据存储数组?

  6. 6

    Swift无法在Xcode测试中测试核心数据吗?

  7. 7

    Swift中的核心数据

  8. 8

    在核心数据中存储和获取NSMutableArray

  9. 9

    将NSMeasurement或NSUnit存储在核心数据中

  10. 10

    将NSDate保存在核心数据XCode 5.0中

  11. 11

    如何使用swiftui将文本字段存储到核心数据中

  12. 12

    Swift核心数据:核心数据中的枚举

  13. 13

    Swift核心数据问题(Xcode 6)

  14. 14

    Swift核心数据问题(Xcode 6)

  15. 15

    xcode / ios:如何将映像保存到磁盘并将名称存储在核心数据中

  16. 16

    将Mantle与核心数据结合使用-NSSet和NSArray

  17. 17

    是否可以在iOS 9和10上同时使用核心数据(Xcode 8和Swift 3.0)?

  18. 18

    在核心数据中存储CLLocationCoordinates

  19. 19

    在核心数据中存储UIColor对象

  20. 20

    核心数据使用Swift保存数据

  21. 21

    使用向导将实体保存到核心数据中

  22. 22

    iOS Swift-在文档目录中存储uiimage并在核心数据中存储路径

  23. 23

    iOS Swift-在文档目录中存储uiimage并在核心数据中存储路径

  24. 24

    核心数据,NSNumber,整数32和整数64

  25. 25

    Swift 3中的新核心数据

  26. 26

    核心数据中的Swift元组

  27. 27

    在SwiftUI中,如何使用核心数据将触摸ID存储为人员/班级的属性并进行记录?

  28. 28

    使用Swift检索核心数据

  29. 29

    使用Swift检索核心数据

热门标签

归档