【发布时间】:2021-12-28 05:50:45
【问题描述】:
我正在尝试将包含 12 个 int 值数组的数组保存到 .plist 文件中。 [[NSNumber]]
在委托方法的每次调用中,我都会得到一个相同的数组,我需要将它添加到其中已经保存的值中。12 大小数组中的每个数组都有 80 个 int 值。
问题是它为每个数组添加了相同的值,最终形成了 12 个具有相同值的数组。
我做错了什么?
var array:[NSMutableArray] = [NSMutableArray](repeating: [], count: 12)
func dataReceived(withData data: [[NSNumber]]!) {
for i in 0..<12 {
(array[i] as AnyObject).addObjects(from: data[i])
}
}
}
扫描结束后调用该方法。
func completed(_ with:Bool){
if(with){
let fileManager = FileManager.default
let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let path = documentDirectory.appending("/\(Int.random(in: 1..<5000)).plist")
if (!fileManager.fileExists(atPath: path)) {
let success = (array as NSArray).write(toFile: path, atomically: true)
if success {
print("file has been created!")
}else{
print("unable to create the file")
}
}else{
print("file already exist")
}
}
}
.plist 文件由包含相同值的 12 项数组创建。
【问题讨论】:
-
你为什么使用旧的 NS 类而不是原生类型行
Array? -
我从 objc 转换了代码。我使用 objc sdk
-
@ndrzhr 在这种情况下,我将编写一个薄层,将来自 sdk 的所有 Objective-C/Foundation 类型转换为 Swift 类型(NSMutableArray 到数组,NSNumber 到 Int/Double/Float,等)在使用任何它之前。这将使代码更清晰、更易于维护。