Một trong các tab của tôi (trong ứng dụng Tab-Based) hoạt động trên iOS 9, nhưng không hoạt động trên iOS 8. Cụ thể, khi cố gắng tải dữ liệu từ plist, tôi nhận được lỗi hiển thị bên dưới.iOS Code Hoạt động trên iOS 9 chứ không phải trên iOS 8?
Tôi có tab "Công cụ lập kế hoạch" để lưu các mục nhập vào một danh sách. iOS 8 Lỗi - reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30)'
Saving Code:
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
plistPath = appDelegate.plistPathInDocument
plistPath2 = appDelegate.plist2PathInDocument
// Extract the content of the file as NSData
let data:NSData = NSFileManager.defaultManager().contentsAtPath(plistPath)!
let data2:NSData = NSFileManager.defaultManager().contentsAtPath(plistPath2)!
do{
if(numOfViewWillAppear == 0)
{
if let x = NSKeyedUnarchiver.unarchiveObjectWithData(data2)
{
self.sortedSections = NSKeyedUnarchiver.unarchiveObjectWithData(data2) as! [String]
self.sections = NSKeyedUnarchiver.unarchiveObjectWithData(data) as! Dictionary
}
numOfViewWillAppear++
}
}
Và mã chuẩn bị appdelegate:
func preparePlist()
{
let rootPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
let url = NSURL(string: rootPath)
plistPathInDocument = (url?.URLByAppendingPathComponent("planner.plist").path)!
if !NSFileManager.defaultManager().fileExistsAtPath(plistPathInDocument){
let plistPathInBundle = NSBundle.mainBundle().pathForResource("planner", ofType: "plist")!
do {
try NSFileManager.defaultManager().copyItemAtPath(plistPathInBundle, toPath: plistPathInDocument)
print("plist copied")
}
catch{
print("error copying plist!")
}
}
else{
print("plst exists \(plistPathInDocument)")
}
}
Mã trong đó tôi tiết kiệm mục vào plist:
self.sections[todoItem.dueDate] = [Assignment(name: todoItem.name, dueDate: todoItem.dueDate)]
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
plistPath = appDelegate.plistPathInDocument
do{
let sectionsData = NSKeyedArchiver.archivedDataWithRootObject(sections)
sectionsData.writeToFile(plistPath, atomically: true)
}
Đảm bảo bạn đang sử dụng NSKeyedArchiver để lưu trữ. Và kiểm tra trước khi lưu trữ nếu dữ liệu là không. –
Vui lòng chia sẻ tệp planner.plist. –
Bạn có sử dụng tệp plist mặc định đi kèm trong ứng dụng của mình không? (Có vẻ như vậy, nhưng muốn xác nhận.) Bạn có thể hiển thị mã khi bạn lưu plist không? –