我一直在使用以下内容来执行我的 plist 并保存数据并在 TableView 中显示 plist 的内容。我正在使用 NSMutableArray 来获取数组的内容并将其显示在 TableView 中。 VC1 是我的表格 View ,VC2 是我的 EnterDetail VC 所以我声明了我的代码,如下 -
class ListTableViewController: UITableViewController
{
var arr = NSMutableArray()
var plistfinalpath = String()
override func viewDidLoad()
{
super.viewDidLoad()
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
}
override func viewDidAppear(animated: Bool)
{
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0]
plistfinalpath = path.stringByAppendingString("/login.plist")
print(plistfinalpath)
arr = (NSMutableArray(contentsOfFile: plistfinalpath))!
print("time of appearing\(arr)")
/* if let temparray = NSMutableArray(contentsOfFile: plistfinalpath)
{
arr = temparray
}*/
self.tableView.reloadData()
}
如您所见,我已将“arr”声明为 NSMutableArray 类型,并且它不是可选的。当我在 didappear() 中使用时,编译器强制我强制解开它。为什么会这样,为什么即使我已将“arr”声明为非可选,也会发生这种情况?每当我第一次运行我的应用程序时,真正的问题就来了,plist 为空意味着“arr”也为空。由于我使用了强制解包,我的应用程序因 fatal error 而崩溃。如果我取消上面代码中的注释行(if let 部分)的注释,它就可以正常工作。所以有什么建议。谢谢。
最佳答案
你的 NSMutableArray 没有问题。
var arr = NSMutableArray()
创建数组的非可选实例。到目前为止,一切顺利......一个表达
NSMutableArray(contentsOfFile: plistfinalpath)
可以返回nil,因此它返回可选值。在这里,您尝试创建 NSMutableArray 的另一个实例并将结果分配给您的 var arr。
A mutable array containing the contents of the file specified aPath. Returns nil if the file can’t be opened or if the contents of the file can’t be parsed into a mutable array.
可能最适合您的方法是这样的
import Foundation
var arr = NSMutableArray(contentsOfFile: "somePath") ?? NSMutableArray()
如果文件尚不存在(或发生其他故障),则这里的变量保证具有默认值(NSMutableArray 的空实例)
关于ios - NSMutableArray 实例在 SWIFT 中默认是可选的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171186/