【问题标题】:adding values to an array of int's array's and saving it to .plist file将值添加到 int 数组的数组并将其保存到 .plist 文件
【发布时间】: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,等)在使用任何它之前。这将使代码更清晰、更易于维护。

标签: ios arrays swift


【解决方案1】:

不确定您的 Objective-c-ish 代码有什么问题,但下面的代码应该按照您想要的方式工作

var array: [[Int]] = Array(repeating: [], count: 12)

func dataReceived(with data: [[Int]]) {
    guard data.count == 12 else { return }

    for (index, values) in data.enumerated() {
        array[index].append(contentsOf: values)
    }
}

【讨论】:

  • “NSMutableArray”类型的值没有“附加”成员。
  • “NSMutableArray”类型的值没有成员“附加”。因为有另一个函数将数据用作 [[NSnumber]] 我无法将其更改为 Int。
  • @ndrzhr 上面的代码也适用于 NSNumber
  • 将 [NSMutableArray] 更改为 [Array] 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[Swift.__EmptyArrayStorage addObjectsFromArray:]:无法识别的选择器发送到实例 0x1fa17a0d0' var 数组:[ NSMutableArray] = [NSMutableArray](repeating: [], count: 12) >>var array:[Array] = [Array](repeating: [], count: 12)
  • var array: [[Int]] = Array(repeating: [], count: 12) func dataReceived(withData data: [[NSNumber]]!) { guard data.count == 12 else { return } for (index, values) in data.enumerated() { array[index].append(contentsOf: values) } } >> 调用实例方法'append'没有完全匹配
猜你喜欢
  • 2016-07-16
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多