我正在编写一个程序,该程序读取手机中的传感器并将传感器数据保存到核心数据 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!)