gpt4 book ai didi

ios - 在 Swift 中将 .plist 数据读入字典

转载 作者:行者123 更新时间:2023-11-30 13:53:06 24 4
gpt4 key购买 nike

我在将 plist 文件中的 XML 数据读入字典时遇到问题。问题包括 plist 未被识别为包的一部分,尽管有正确的选项将其添加到导入时检查的项目中。

我正在寻找一种简单的方法来在程序启动时读取数据,然后通过访问数组的方法轻松获取数据。数据不需要重写或更改,因此只需一次传输即可使程序运行。

以下是 .plist 的数据结构示例(记录数比实际文件少):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>Name</key>
<string>19” HD Monitor</string>
<key>Price</key>
<integer>11999</integer>
<key>ProdId</key>
<integer>123</integer>
</dict>
<dict>
<key>Name</key>
<string>4GB RAM Module</string>
<key>Price</key>
<integer>2995</integer>
<key>ProdId</key>
<integer>456</integer>
</dict>
<dict>
<key>Name</key>
<string>Samsung 256GB SSD</string>
<key>Price</key>
<integer>11250</integer>
<key>ProdId</key>
<integer>789</integer>
</dict>
</array>
</plist>

数据由产品名称 (String)、以便士或美分为单位的价格 (Int) 以及唯一的产品 ID (Int) 组成。它们的键名分别是“Name”、“Price”和“ProdID”。

这是我用来读取数据的代码。我使用一个简单的命令行程序以简单的形式隔离此操作,并进行测试以查看数据是否已存储并从字典中检索。数据操作将在一个类中提供:

//
// Datadump.swift
// PListTester
//
// Created by Kwangle on 30/11/2015.
// Copyright (c) 2015 KwangCo All rights reserved.
//

import Foundation


class Datadump {


//declare container array
var dictArray: Array<Dictionary<String,AnyObject>>

//reads data when class is constructed
init () {

let bundle = NSBundle(forClass: Datadump.self)
//gets file location of 'Products.plist' from bundle
let fileLocation = bundle.pathForResource("Hardware", ofType: "plist")

//creates NSArray from contents of 'Hardware.plist'
let productArray = NSArray(contentsOfFile: fileLocation!)
//creates dictionary array from NSArray via force conversion
dictArray = productArray as! Array<Dictionary<String,AnyObject>>

for (var i = 0; i < dictArray.count; i++){
dictArray.append(productArray!.objectAtIndex(i) as! Dictionary<String, AnyObject>)
}
}

//reads price value of matching ProdID
func priceFromID(pId: Int) -> Int{
var price = 0
//iterate through array until relevant product is found
for dict in dictArray{
//reads 'ProdId' key and compares it to pId function argument
if dict["ProdId"] as! Int == pId{
//if product ID is found price is set to its value
price = dict["Price"] as! Int
break
}
}

return price;

}

}//end class

Main 方法只是创建 DataDump 类的实例,并使用与 ProdId 匹配的值运行 PriceFromID 方法:

//
// main.swift
// PListTester
//
// Created by Kwangle on 29/11/2015.
// Copyright (c) 2015 KwangCo All rights reserved.
//

import Foundation

//creates instance of Datadump class
var myData = Datadump ()

//queries data
print (myData.priceFromID(123) )

我收到的错误是:

fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)

这与以下行有关:

let productArray = NSArray(contentsOfFile: fileLocation!)

我还收到错误代码:

EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

对此的任何帮助将不胜感激!

非常感谢,千瓦

最佳答案

您不想将内容加载到数组中。你想要一本字典。

看这里;

How to read data structure from .plist file into NSArray

关于ios - 在 Swift 中将 .plist 数据读入字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34005258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com