- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想搜索我的 plist 中的项目。 plist 由一组字典组成。每个键/值代表字符串/整数等,但这并不重要。
正如您将在下面的 tableViewController 类中看到的,我当前已经输入了一个数组。我知道我需要从我的 plist 中创建一个对象/项目数组,但我无法弄清楚如何在 View Controller 中引用 plist 中的对象。
查看controller.swift文件:
import UIKit
class TableViewController: UITableViewController, UISearchResultsUpdating {
var array = ["Example 1", "Example 2", "Example 3"]
var filteredArray = [String]()
var searchController = UISearchController()
var resultsController = UITableViewController()
override func viewDidLoad() {
super.viewDidLoad()
searchController = UISearchController(searchResultsController: resultsController)
tableView.tableHeaderView = searchController.searchBar
searchController.searchResultsUpdater = self
resultsController.tableView.delegate = self
resultsController.tableView.dataSource = self
}
//Added func to update search results
func updateSearchResults(for searchController: UISearchController) {
filteredArray = array.filter({ (array:String) -> Bool in
if array.contains(searchController.searchBar.text!) {
return true
} else {
return false
}
})
resultsController.tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
extension TableViewController {
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == resultsController.tableView {
return filteredArray.count
} else {
return array.count
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if tableView == resultsController.tableView {
cell.textLabel?.text = filteredArray[indexPath.row]
} else {
cell.textLabel?.text = array[indexPath.row]
}
return cell
}
}
我尝试通过 plist 教程创建一个对象类来解决这个问题。它使用元素周期表的示例:
import UIKit
struct Element {
enum State: String {
case Solid, Liquid, Gas
}
let atomicNumber: Int
let atomicWeight: Float
let discoveryYear: String
let group: Int
let name: String
let period: Int
let radioactive: Bool
let state: State
let symbol: String
// Position in the table
let horizPos: Int
let vertPos: Int
}
extension Element {
enum ErrorType: Error {
case noPlistFile
case cannotReadFile
}
/// Load all the elements from the plist file
static func loadFromPlist() throws -> [Element] {
// First we need to find the plist
guard let file = Bundle.main.path(forResource: "Element", ofType: "plist") else {
throw ErrorType.noPlistFile
}
// Then we read it as an array of dict
guard let array = NSArray(contentsOfFile: file) as? [[String: AnyObject]] else {
throw ErrorType.cannotReadFile
}
// Initialize the array
var elements: [Element] = []
// For each dictionary
for dict in array {
// We implement the element
let element = Element.from(dict: dict)
// And add it to the array
elements.append(element)
}
// Return all elements
return elements
}
/// Create an element corresponding to the given dict
static func from(dict: [String: AnyObject]) -> Element {
let atomicNumber = dict["atomicNumber"] as! Int
let atomicWeight = Float(dict["atomicWeight"] as! String) ?? 0
let discoveryYear = dict["discoveryYear"] as! String
let group = dict["group"] as! Int
let name = dict["name"] as! String
let period = dict["period"] as! Int
let radioactive = dict["radioactive"] as! String == "True"
let state = State(rawValue: dict["state"] as! String)!
let symbol = dict["symbol"] as! String
let horizPos = dict["horizPos"] as! Int
let vertPos = dict["vertPos"] as! Int
return Element(atomicNumber: atomicNumber,
atomicWeight: atomicWeight,
discoveryYear: discoveryYear,
group: group,
name: name,
period: period,
radioactive: radioactive,
state: state,
symbol: symbol,
horizPos: horizPos,
vertPos: vertPos)
}
}
并且在 viewController 类中,而不是
var array = ["Example 1", "Example 2", "Example 3"]
我尝试过各种变体
var array = Element["name"]
和
var array = elements.name
但它们显然不起作用,因为对 plist 的引用位于对象类中。
如果有人知道如何使用 swift 3/xcode 8 解决这个问题,我将非常感激!!
最佳答案
我希望您的问题仍然有意义。据我了解,您无法过滤数组,对吗?如果是这样,我建议您看看this和 this教程。它们都代表了加载过滤数组的稍微不同的方法,但这并不重要,它们都有效。
附注如果您想以后自定义它,我不建议您制作一个特殊的 tableView 来进行搜索,因为稍后您将不得不以编程方式完成它。这样做会更有效:
If searchController.isActive {
// do some stuff
} else { // another stuff }
但这只是我的意见。我希望我的问题能有所帮助;)。
关于swift - UISearchBar textDidChange 来自 plist 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010510/
我的应用程序中有一个 PLIST 文件,其中包含各种配置数据。一些数据是用于访问服务器的 URL。该服务器为我们代码的几个不同版本托管 JSON 文件。我想要做的是在具有版本的 PLIST 文件中有一
我想制作一个从 plist 中检索数据的数据管理器类,我想知道我是否应该制作一个包含所有类方法的类,每次调用该方法并返回请求的值时读取 plist,或者创建一个类使用 plist 数据初始化数组(实例
我正在编写一个生成 .xcodeproj 文件的应用程序。它生成了一个 .pbxproj 文件,但是在 Xcode 中打开它时,我收到一条错误消息,“无法打开,因为无法解析项目文件。”仅此而已。 是否
要在 iPhone 中执行我的应用程序,首先我必须将配置文件添加到我的 iPhone 中。好的。但我不明白在资源下的 xCode 中的 iphone 应用程序中添加 entitlements.plis
我目前正在尝试从 Visual Studio Community 2017 为 MAC 运行与 Appium 集成的 C# NUnit 测试脚本。软件配置为 MAC OS- 10.12.6、Appiu
通过网络发送二进制 plist 比简单 plist 的优点是什么。另外,客户端处理二进制 plist 的速度有多快? 最佳答案 与 XML 格式的 plist 相比,它们通常要小得多,而且处理速度要快
我有一个如下图所示的 plist,那是我的主要 plist,其中 “bid” 字段是唯一的。我有出值(value) (例如 bid=90) 然后我需要在我的主(第一张图片)plist 的所有条目中搜索
如果不使用主包中 plist 上文件管理器实例的 .copyItemAtPath 方法,我将如何创建一个空的 plist 文件?我想检查我的 DocumentDirectory 中是否已经创建了一个
我在 ~/Library/LaunchAgents 有以下 plist 文件: Label com.yogapo.test_launchd Program
所以我知道如何让苹果邮件 9 始终加载远程内容,但我需要以编程方式设置该首选项。我正在查看苹果邮件 plist 文件,但似乎找不到值。有谁知道这个设置可能在哪里? 最佳答案 我不同意 ~/Librar
使用 MonoTouch 加载和处理“两级嵌套”plist 文件的最佳方式是什么?我有一个 plist 文件,其中的数据(结构上)类似于以下内容: - USA --- New York --- Chi
所以在我的最后一个问题中,我试图弄清楚我应该使用什么,Plist 或 Core data 或 sqllight,我决定尝试所有这些来提高我的技能。所以我开始阅读有关 plist 及其工作方式的文章,但
我有一个手动维护的属性列表,它定义了一组相同类型的对象。这些对象具有许多属性,其中之一是正则表达式字符串。一些对象共享一个通用的正则表达式,我的问题是我必须在文件的多个位置维护相同的正则表达式,这很容
-(NSString*)dataFilePath{ NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentD
我正在尝试让我的应用程序从电子邮件中将设置导入到自身中。这将起作用的方式是用户将向自己发送一个 settings.properties 文件,这实际上是一个看起来像这样的 plist
我在 Xcode 4.2 中有一个应用程序。 我已经根据需要创建了 plist 文件。 我已经从应用程序主包中找到数据并将数据放入数组中。 但是由于我想在运行时修改plist数据,所以在Documen
Apple 强烈建议在将基于 XML 的大型数据集读入 iPhone 应用程序时使用二进制 plist 格式。他们的理由之一是 XML 解析在 iPhone 上非常费力。但是,这需要首先转换驻留在远程
我在 Xcode build设置中启用了 Info.plist 的预处理,以用 version.h 中的相应值替换 CFBundleVersion 中表示版本号的键。这很好用:VERSION_NUMB
抱歉,帖子太长了。当我第二次使用 plist 中的字符串时,它使我的程序崩溃。我有 cocos2d 项目( attach ),其中有一个场景和一个对象。和一个 .plist 文件 HelloWorld
我已将新实体添加到现有 Plist。由于 Plist 不一致,新版本的应用程序崩溃。 如何将旧 plist 数据与新 plist 合并? 我的Plist创建方法如下 - (void)createEdi
我是一名优秀的程序员,十分优秀!