iOS Swift : AnyObject 다운 캐스팅

Nate Birkholz

Cocoa에서 Swift 로의 다운 캐스팅에 대한 질문이 많았고 몇 가지 버그가 있다는 것을 알고 있지만 여기에서 찾은 많은 방법을 시도했지만 누군가가 도움을 줄 수 있기를 바라면서 작동하도록 할 수 없습니다.

저는 프로그래밍이 처음입니다. iOS 용 데이터베이스 프로그램을 신속하게 만들고 있습니다.

개인 클래스가 있습니다.

class Person : NSObject {
    var firstName : String
    var lastName : String

    init (firstName : String, lastName : String) {
        self.firstName = firstName
        self.lastName = lastName
    }

    func encodeWithCoder(aCoder: NSCoder!) {
        aCoder.encodeObject(firstName, forKey:"firstName")
        aCoder.encodeObject(lastName, forKey:"lastName")
}

    init (coder aDecoder: NSCoder!) {
        self.firstName = aDecoder.decodeObjectForKey("firstName") as String
        self.lastName = aDecoder.decodeObjectForKey("lasName") as String
    }

}

내 뷰 컨트롤러의 맨 위에 클래스 배열을 선언합니다.

    var peopleArray = [Person]()

그런 다음 샘플 사용자를 선언하여 배열을 채우고 배열에 추가합니다.

    var nateB = Person(firstName: "Nate", lastName: "Birkholz")
    var nateC = Person(firstName: "Nate", lastName: "Carson")
    var nateD = Person(firstName: "Nate", lastName: "Donnelly")
    self.peopleArray.append(nateB)
    self.peopleArray.append(nateC)
    self.peopleArray.append(nateD)

그런 다음 데이터를 plist 파일에 저장하려고합니다.

let fileManager = (NSFileManager.defaultManager())
        let directorys : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

        println("value of directorys is \(directorys)")

        if (directorys != nil){
            let directories:[String] = directorys!;
            let pathToFile = directories[0]; //documents directory

            let plistfile = "PeopleArray.plist"
            let plistpath = pathToFile.stringByAppendingPathComponent(plistfile);

            if !fileManager.fileExistsAtPath(plistpath){  //writing Plist file

                self.createInitialPeople()

                println("Declaring cocoaArray")
                var cocoaArray : NSArray = [NSKeyedArchiver.archivedDataWithRootObject(peopleArray)]
                println("writing to path")
                cocoaArray.writeToFile(plistpath, atomically: true)
                let tellMe = cocoaArray.writeToFile(plistpath, atomically: true)
                println("Return of write is \(tellMe)")
            } 

이해할 수없는 데이터가 포함 된 Plist 파일이 생성됩니다.

앱을 닫고 다시 시작한 다음 파일로드를 시도합니다.

         else {            
            println("\n\nPlist file found at \(plistpath)")

            let cocoaArray = NSMutableArray.arrayWithContentsOfFile(plistpath)
            peopleArray = cocoaArray as Array
        }
    }

"AnyObject는 'Person'과 동일하지 않습니다. 여기에 나열된 것을 여러 가지 방법으로 다운 캐스팅 해 보았지만 성공적으로 수행 할 수 없습니다. 이것은 정말 실망 스럽습니다.

최종 코드로 업데이트 :

func createPeoplePlist() {

    let fileManager = (NSFileManager.defaultManager())
    let directorys : [String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

    println("value of directorys is \(directorys)")

    if (directorys != nil){
        let directories:[String] = directorys!;
        let pathToFile = directories[0]; //documents directory

        let plistfile = "PeopleArray.plist"
        plistpath = pathToFile.stringByAppendingPathComponent(plistfile);

        if !fileManager.fileExistsAtPath(plistpath){  //writing Plist file

            self.createInitialPeople()

            println("Saving to Plist")

            [NSKeyedArchiver.archiveRootObject(peopleArray, toFile: plistpath)]

            println("writing to path \(plistpath)")


        } else {            //Reading Plist file
            println("\n\nPlist file found at \(plistpath)")

            peopleArray = NSKeyedUnarchiver.unarchiveObjectWithFile(plistpath) as [Person]



        }
    }


}
jtbandes

배열을 NSData다시 읽을 때 (처음에 아카이브 할 때 생성 한 데이터) 여전히 포함 됩니다. 그러나 디스크에 쓰기 전에 데이터를 다른 어레이에 넣는 이유에 대해 의문을 제기합니다. peopleArray그 자체가 루트 객체가 될 수 있습니다. 그것을 감싸는 추가 배열이 필요하지 않습니다. 그런 다음 간단히 archiveRootObject(_:toFile:)unarchiveObjectWithFile(_:).

또한 자세한 정보 Archives and Serializations Programming GuideProperty List Programming GuideNSKeyedArchiver 문서를 읽는 것이 좋습니다 .

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

AnyObject를 NSMutableDictionary로 캐스팅하는 동안 Swift 클래스 캐스팅이 실패합니다.

분류에서Dev

'Swift.Optional <Swift.AnyObject>'유형의 값을 'NSFetchRequest'로 캐스팅 할 수 없습니다.

분류에서Dev

Swift에서 NSObject 다운 캐스팅

분류에서Dev

Swift 3 다운 캐스팅 JSON 사전

분류에서Dev

'AVPlayer'유형의 값을 'Swift.AnyObject.Type'으로 캐스팅 할 수 없습니다.

분류에서Dev

다차원 배열 Swift 다운 캐스팅

분류에서Dev

AnyObject를 T로 캐스팅

분류에서Dev

Swift 3.0 다운 캐스팅 및 모범 사례

분류에서Dev

프로토콜 사용시 Swift Array 다운 캐스팅 런타임 오류

분류에서Dev

CRTP 및 다운 캐스팅

분류에서Dev

문자열을 [NSObject : AnyObject]로 캐스팅

분류에서Dev

Swift (String : AnyObject)는 [String : AnyObject]로 변환 할 수 없습니다.

분류에서Dev

Swift-다운 캐스팅이란 무엇입니까? Tableview에서 셀을 다운 캐스트해야하는 이유는 무엇입니까?

분류에서Dev

Swift AnyObject 변환

분류에서Dev

Swift : NSObject를 다른 유형의 UI 객체로 캐스팅

분류에서Dev

다형성 대 다운 캐스팅

분류에서Dev

Equatable to AnyObject를 준수하는 객체에서 다운 캐스트 할 수 없습니다.

분류에서Dev

Swift 배열 구조체를 AnyObject로 성공적으로 캐스팅 할 수있는 이유는 무엇입니까?

분류에서Dev

Android-iOS Swift 2와 같은 Android 용 AnyObject

분류에서Dev

C ++에서 다운 캐스팅 문제

분류에서Dev

다운 캐스팅 안전성

분류에서Dev

C ++에서 상속 다운 캐스팅

분류에서Dev

Java 다운 캐스팅 ClassCastException 오류

분류에서Dev

다운 캐스팅 펜촉 uitableviewcell

분류에서Dev

다운 캐스팅 포인터

분류에서Dev

다운 캐스팅 사진 문제

분류에서Dev

다운 캐스팅 모범 사례 (C ++)

분류에서Dev

DataTable의 F # 다운 캐스팅 요소

분류에서Dev

iOS Swift 다운로드 파일

Related 관련 기사

  1. 1

    AnyObject를 NSMutableDictionary로 캐스팅하는 동안 Swift 클래스 캐스팅이 실패합니다.

  2. 2

    'Swift.Optional <Swift.AnyObject>'유형의 값을 'NSFetchRequest'로 캐스팅 할 수 없습니다.

  3. 3

    Swift에서 NSObject 다운 캐스팅

  4. 4

    Swift 3 다운 캐스팅 JSON 사전

  5. 5

    'AVPlayer'유형의 값을 'Swift.AnyObject.Type'으로 캐스팅 할 수 없습니다.

  6. 6

    다차원 배열 Swift 다운 캐스팅

  7. 7

    AnyObject를 T로 캐스팅

  8. 8

    Swift 3.0 다운 캐스팅 및 모범 사례

  9. 9

    프로토콜 사용시 Swift Array 다운 캐스팅 런타임 오류

  10. 10

    CRTP 및 다운 캐스팅

  11. 11

    문자열을 [NSObject : AnyObject]로 캐스팅

  12. 12

    Swift (String : AnyObject)는 [String : AnyObject]로 변환 할 수 없습니다.

  13. 13

    Swift-다운 캐스팅이란 무엇입니까? Tableview에서 셀을 다운 캐스트해야하는 이유는 무엇입니까?

  14. 14

    Swift AnyObject 변환

  15. 15

    Swift : NSObject를 다른 유형의 UI 객체로 캐스팅

  16. 16

    다형성 대 다운 캐스팅

  17. 17

    Equatable to AnyObject를 준수하는 객체에서 다운 캐스트 할 수 없습니다.

  18. 18

    Swift 배열 구조체를 AnyObject로 성공적으로 캐스팅 할 수있는 이유는 무엇입니까?

  19. 19

    Android-iOS Swift 2와 같은 Android 용 AnyObject

  20. 20

    C ++에서 다운 캐스팅 문제

  21. 21

    다운 캐스팅 안전성

  22. 22

    C ++에서 상속 다운 캐스팅

  23. 23

    Java 다운 캐스팅 ClassCastException 오류

  24. 24

    다운 캐스팅 펜촉 uitableviewcell

  25. 25

    다운 캐스팅 포인터

  26. 26

    다운 캐스팅 사진 문제

  27. 27

    다운 캐스팅 모범 사례 (C ++)

  28. 28

    DataTable의 F # 다운 캐스팅 요소

  29. 29

    iOS Swift 다운로드 파일

뜨겁다태그

보관