【问题标题】:NSArray to NSData encoding formattingNSArray 到 NSData 编码格式
【发布时间】:2014-09-02 02:45:05
【问题描述】:

我正在编写一个程序,该程序读取手机中的传感器并将传感器数据保存到核心数据 SQLite 模型中,每组读数都与特定会话有关

该程序为用户提供了通过电子邮件发送特定会话的 .csv 文件的选项。

以前从未这样做过,我通过初始化委托和上下文以及在核心数据中搜索与指定会话相关的实体来解决此问题。满足会话属性的实体然后将其数据字段(gps、mag、accel、gyro)读取并放入字符串中。然后将字符串附加到数组中。一切都很快完成。

搜索实体并创建数组后,我尝试创建一个 csv 文件作为电子邮件的附件。文件已成功附加,但我的编码技术是在文件中显示附加数据。

我想在手机上保存一个文件并将副本通过电子邮件发送给用户。

在再次转换为 NSData 之前,我必须将 Array 更改为 NSArray:

    let paths: NSArray = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true);
    let path = paths[0].stringByAppendingPathComponent("SessionData.csv")

    if !NSFileManager.defaultManager().fileExistsAtPath(path)
    {
        NSFileManager.defaultManager().createFileAtPath(path, contents: nil, attributes: nil)
    }
    else
    {
        NSFileManager.defaultManager().createFileAtPath(path, contents: nil, attributes: nil)
    }

    var handle: NSFileHandle = NSFileHandle(forWritingAtPath: path)
    handle.truncateFileAtOffset(handle.seekToEndOfFile())
    var arrayToWriteNS = (arrayToWrite as NSArray)
    var dataNS: NSData = NSKeyedArchiver.archivedDataWithRootObject(arrayToWrite as NSArray)
    handle.writeData(dataNS)

    mc.setSubject(emailTitle)
    mc.addAttachmentData(dataNS, mimeType: "text/csv", fileName: "SessionData.csv")   

这是前置和附加的数据:

bplist00‘()T$topX$objectsX$versionY$archiver—TrootĨ    
!U$null“
V$classZNS.objectsÄ©ÄÄÄÄÄÄÄÄ    Ä

“我的数据”

 “"#$'X$classesZ$classname¢%&WNSArrayXNSObjectWNSArray܆_NSKeyedArchiver(25:<IOT[fhrtvxz|~ÄÇÑ·Ø}KÁµÉQV_jmu~Üã*ù 

在包含 28,000 个实体的大型数据会话中,可能有大约 750 行前置数据。

如果您能提供任何帮助,我们将不胜感激。

我是 iOS、Obj-C 和 swift 的新手,因此我很肯定有更好的方法来做到这一点,只是我还没有找到更好的方法。

谢谢。

更新:最终只使用 NSString 数据编码并以增量方式写入我的文件:

handle.truncateFileAtOffset(handle.seekToEndOfFile())
var stringToWriteNS = (stringToWrite as NSString).dataUsingEncoding(NSUTF8StringEncoding)
handle.writeData(stringToWriteNS!)

【问题讨论】:

  • 你不想要NSKeyedArchiver,它用于归档和恢复类。您需要遍历数组并以您要呈现给用户的格式创建每个项目的文本表示。

标签: ios core-data swift nsdata messageui


【解决方案1】:

你不需要 NSKeyedArchiver,它是用来归档和恢复类的。

您需要遍历数组并以您要呈现给用户的格式创建每个项目的文本表示。

快速搜索 CocoaPods 发现 several projects 可能适合您生成 csv 格式数据的需要。

This one 可能是您需要的。

csv 相当简单,因此通过编写自己的代码将数据格式化为 csv 是合理的。

【讨论】:

  • 谢谢,我会将 CocoaPods 添加到我的搜索域。我最终使用了 NSString 编码并以增量方式写入我的文件,因为我自己很容易创建 csv。
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2011-04-20
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
相关资源
最近更新 更多