Swift 3를 사용한 핵심 데이터에 대한 지침

WokerHead

코드를 찾지 않고 (하지만 아프지는 않을 것입니다) 어떻게해야할지 알고 싶습니다. 블로그 리더와 같은 앱이 있습니다. JSON으로 가져 와서 jsonArray에 배치 한 다음 테이블보기에 표시 할 배열에 배치 한 MYSQL 데이터베이스에 정보가 있습니다. 이 테이블보기에서 일반적으로 모든 개체가 한 섹션에 있습니다. 각 행 / 개체를 클릭하면 해당 행이 다른 섹션으로 이동하는 버튼이 있습니다. 또한 메인 섹션 (섹션 1)을 검색 할 수있는 검색 컨트롤러가 있습니다.

행의 순서 또는 위치를 Core Data에 어떻게 저장합니까?

예 : 섹션 0에 0 개의 행이 있고 섹션 1에 5 개의 행이 있습니다. 섹션 1의 행 중 하나에있는 버튼을 클릭하면 해당 행이 섹션 0으로 이동합니다. 이제 섹션 0에는 1 개의 행이 있고 섹션 1에는 4 개의 행이 있습니다. . 이 새로운 tableview 순서를 Core Data에 어떻게 저장합니까? 행 위치를 저장하고 싶으므로 앱은 선택한 행이 어느 섹션에 있었는지 기억합니다.

섹션에있는 행의 indexPath를 저장합니까? 엔티티 및 속성을 추가 할 때 저장하려면 무엇을 사용합니까?

또한 mysql 리더이므로 tableview가 다시로드되고 새 콘텐츠가 추가 될 때 tableview가 핵심 데이터에서 읽기 때문에 여전히 표시됩니까?

Core Data (Swift 3 코드)를 배우고 있지만이 앱에 사용하는 데 문제가 있습니다.

도와 주셔서 감사합니다!

Bubuxu

MySQL 데이터베이스에서 전체 데이터를 저장할 필요가없는 경우 UserDefaults를 사용하여 주문 데이터를 저장하십시오. dataId 및 indexPath 만 포함하는 클래스 정의 :

class DataOrdering: NSObject, NSCoding {

    var indexPath: IndexPath?
    var dataId: String?

    init(dataId: String, indexPath: IndexPath) {
        super.init()
        self.dataId = dataId
        self.indexPath = indexPath
    }

    required init(coder aDecoder: NSCoder) {

        if let dataId = aDecoder.decodeObject(forKey: "dataId") as? String {
            self.dataId = dataId
        }

        if let indexPath = aDecoder.decodeObject(forKey: "indexPath") as? IndexPath {
            self.indexPath = indexPath
        }

    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(dataId, forKey: "dataId")
        aCoder.encode(indexPath, forKey: "indexPath")
    }

    func save(defaults key: String) -> Bool {

        let defaults = UserDefaults.standard
        let savedData = NSKeyedArchiver.archivedData(withRootObject: self)
        defaults.set(savedData, forKey: key)
        return defaults.synchronize()

    }

    convenience init?(defaults key: String) {

        let defaults = UserDefaults.standard
        if let data = defaults.object(forKey: key) as? Data,
            let obj = NSKeyedUnarchiver.unarchiveObject(with: data) as? DataOrdering,
            let dataId = obj.dataId,
            let indexPath = obj.indexPath {
            self.init(dataId: dataId, indexPath: indexPath)
        } else {
            return nil
        }

    }

    class func allSavedOrdering(_ maxRows: Int) -> [Int: [DataOrdering]] {

        var result: [Int: [DataOrdering]] = [:]
        for section in 0...1 {
            var rows: [DataOrdering] = []
            for row in 0..<maxRows {
                let indexPath = IndexPath(row: row, section: section)
                if let ordering = DataOrdering(defaults: indexPath.defaultsKey) {
                    rows.append(ordering)
                }
                rows.sort(by: { $0.indexPath! < $1.indexPath! })
            }
            result[section] = rows
        }

        return result

    }

}

플레이 그라운드 샘플 :

let data = DataOrdering(dataId: "1", indexPath: IndexPath(row: 0, section: 0))

let savedData = NSKeyedArchiver.archivedData(withRootObject: data)
let obj = NSKeyedUnarchiver.unarchiveObject(with: savedData) as? DataOrdering
obj?.dataId // print: "1"
obj?.indexPath // print: [0,0]

저장 기능을 사용하여 "키"로 저장하고 DataOrdering으로 다시 읽습니다 (기본값 : "키").

업데이트 됨

이 클래스를 사용하기 위해 뷰 컨트롤러에 대한 코드를 추가했습니다.

extension IndexPath {
    var defaultsKey: String { return "data_ordering_\(section)_\(row)" }
}

class ViewController: UITableViewController {

    var data: [Any]?
    var items: [[Any]]?

    func fetchData() {

        // request from remote or local
        data = [1, 2, 3, "a", "b", "c"] // sample data

        // Update the items to first section has 0 elements,
        // and place all data in section 1
        items = [[], data ?? []]

        // apply ordering
        applySorting() { "\($0)" }

        // save ordering
        saveSorting() { "\($0)" }

        // refresh the table view
        tableView.reloadData()

    }

    func applySorting(_ dataIdBlock: (Any) -> String) {

        // get all saved ordering
        guard let data = self.data else { return }
        let ordering = DataOrdering.allSavedOrdering(data.count)

        var result: [[Any]] = [[], []]

        for (section, ordering) in ordering {
            guard section <= 1 else { continue } // make sure the section is 0 or 1
            let rows = data.filter({ obj -> Bool in
                return ordering.index(where: { $0.dataId == .some(dataIdBlock(obj)) }) != nil
            })
            result[section] = rows
        }

        self.items = result

    }

    func saveSorting(_ dataIdBlock: (Any) -> String) {

        guard let items = self.items else { return }

        for (section, rows) in items.enumerated() {
            for (row, item) in rows.enumerated() {
                let indexPath = IndexPath(row: row, section: section)
                let dataId = dataIdBlock(item)
                let ordering = DataOrdering(dataId: dataId, indexPath: indexPath)
                ordering.save(defaults: indexPath.defaultsKey)
            }
        }

    }

    @IBAction func buttonMoveToSectionTapped(_ sender: UIButton) {

        // if the sender's tag is row index
        // or you can get indexPath by tableView.indexPath(for: cell) function too
        let row = sender.tag

        // move this item from section 1 to section 0 (last position)
        if let item = items?[1].remove(at: row) {
            items?[0].append(item)
        }

        // Save all sorting
        saveSorting() { "\($0)" }

        tableView.reloadData() // refresh table view

    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return self.items?.count ?? 0
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.items?[section].count ?? 0
    }


}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Swift를 사용한 핵심 데이터-부모 / 자식 관계

분류에서Dev

Swift 3에서 Alecrim 핵심 데이터 사용

분류에서Dev

iOS Swift 앱의 핵심 데이터에서 이상한 동작

분류에서Dev

핵심 데이터 Swift 3에서 PersistentStore (for : url)를 사용하는 방법

분류에서Dev

Swift : 객체에 대한 핵심 데이터 NSSet을 확인하는 방법

분류에서Dev

한 번에 많은 객체를 핵심 데이터에 입력

분류에서Dev

Swift 3의 핵심 데이터를 사용하여 여러 부서에 대해 하나의 레코드를 저장하는 방법

분류에서Dev

Swift 3-핵심 데이터에서 이미지 저장 및 가져 오기

분류에서Dev

gsl :: at에 대한 핵심 지침 검사기의 정적 분석 경고를 처리하는 방법은 무엇입니까?

분류에서Dev

선택한 이미지를 핵심 데이터에 추가하려면 어떻게해야합니까?

분류에서Dev

Array Swift 3에서 핵심 데이터에 데이터 추가

분류에서Dev

핵심 데이터 (Swift)를 사용하여 장치에 데이터를 저장 / 검색 할 수 없음

분류에서Dev

Swift-핵심 데이터 용량

분류에서Dev

핵심 데이터를 업데이트하고 사용자가 저장 한 데이터를 유지하는 방법은 무엇입니까?

분류에서Dev

핵심 데이터-대다 관계 속성에 대한 정보

분류에서Dev

핵심 데이터가 술어에 대한 where 절을 생성 할 수 없음 (Swift)

분류에서Dev

핵심 데이터 : 백그라운드 NSManagedObjectContext에 대한 업데이트가 저장시 작동하지 않음

분류에서Dev

IOS 기존 핵심 데이터에 더 많은 관계를 추가 한 후 핵심 데이터를 활용하는 방법

분류에서Dev

신속한 핵심 데이터 : 카메라에서 이미지 저장

분류에서Dev

인앱 구매를 사용하여 핵심 데이터 애플리케이션에 대한 항목 수를 제한합니다.

분류에서Dev

UICollectionView에서 선택한 후 핵심 데이터를 사용하여 상세보기 채우기

분류에서Dev

Redis 데이터 액세스를위한 핵심 설계

분류에서Dev

NSJSONSerialization-JSON에 대한 핵심 데이터 관계

분류에서Dev

iCloud 및 핵심 데이터에 대한 NSPersistentStoreUbiquitousContentNameKey의 고유성

분류에서Dev

핵심 데이터 이상한 충돌

분류에서Dev

핵심 데이터-가져온 객체에서 동일한 속성 감지

분류에서Dev

이상한 핵심 데이터 반응-NSManagedObject 하위 클래스를 감지하지 못함

분류에서Dev

Swift-핵심 데이터에서 이미지 검색

분류에서Dev

핵심 데이터 일대 다 관계에서 동일한 객체를 여러 번 보유

Related 관련 기사

  1. 1

    Swift를 사용한 핵심 데이터-부모 / 자식 관계

  2. 2

    Swift 3에서 Alecrim 핵심 데이터 사용

  3. 3

    iOS Swift 앱의 핵심 데이터에서 이상한 동작

  4. 4

    핵심 데이터 Swift 3에서 PersistentStore (for : url)를 사용하는 방법

  5. 5

    Swift : 객체에 대한 핵심 데이터 NSSet을 확인하는 방법

  6. 6

    한 번에 많은 객체를 핵심 데이터에 입력

  7. 7

    Swift 3의 핵심 데이터를 사용하여 여러 부서에 대해 하나의 레코드를 저장하는 방법

  8. 8

    Swift 3-핵심 데이터에서 이미지 저장 및 가져 오기

  9. 9

    gsl :: at에 대한 핵심 지침 검사기의 정적 분석 경고를 처리하는 방법은 무엇입니까?

  10. 10

    선택한 이미지를 핵심 데이터에 추가하려면 어떻게해야합니까?

  11. 11

    Array Swift 3에서 핵심 데이터에 데이터 추가

  12. 12

    핵심 데이터 (Swift)를 사용하여 장치에 데이터를 저장 / 검색 할 수 없음

  13. 13

    Swift-핵심 데이터 용량

  14. 14

    핵심 데이터를 업데이트하고 사용자가 저장 한 데이터를 유지하는 방법은 무엇입니까?

  15. 15

    핵심 데이터-대다 관계 속성에 대한 정보

  16. 16

    핵심 데이터가 술어에 대한 where 절을 생성 할 수 없음 (Swift)

  17. 17

    핵심 데이터 : 백그라운드 NSManagedObjectContext에 대한 업데이트가 저장시 작동하지 않음

  18. 18

    IOS 기존 핵심 데이터에 더 많은 관계를 추가 한 후 핵심 데이터를 활용하는 방법

  19. 19

    신속한 핵심 데이터 : 카메라에서 이미지 저장

  20. 20

    인앱 구매를 사용하여 핵심 데이터 애플리케이션에 대한 항목 수를 제한합니다.

  21. 21

    UICollectionView에서 선택한 후 핵심 데이터를 사용하여 상세보기 채우기

  22. 22

    Redis 데이터 액세스를위한 핵심 설계

  23. 23

    NSJSONSerialization-JSON에 대한 핵심 데이터 관계

  24. 24

    iCloud 및 핵심 데이터에 대한 NSPersistentStoreUbiquitousContentNameKey의 고유성

  25. 25

    핵심 데이터 이상한 충돌

  26. 26

    핵심 데이터-가져온 객체에서 동일한 속성 감지

  27. 27

    이상한 핵심 데이터 반응-NSManagedObject 하위 클래스를 감지하지 못함

  28. 28

    Swift-핵심 데이터에서 이미지 검색

  29. 29

    핵심 데이터 일대 다 관계에서 동일한 객체를 여러 번 보유

뜨겁다태그

보관