私は、携帯電話内のセンサーを読み取り、センサー データをコアデータ SQLite モデルに保存するプログラムをまとめています。各読み取りセットは、特定のセッションに関連しています。
このプログラムは、特定のセッションの .csv ファイルを電子メールで送信するオプションをユーザーに提供します。
以前はこれを行ったことがなかったので、デリゲートとコンテキストを初期化し、指定されたセッションに関連するエンティティのコア データを検索することで、この問題に取り組みました。セッション属性を満たすエンティティは、データ フィールド (gps、mag、accel、gyro) を読み取り、文字列に入れます。次に、文字列が配列に追加されます。すべてが迅速に行われます。
エンティティが検索され、配列が作成された後、電子メールに添付するための csv ファイルを作成しようとしました。ファイルは正常に添付されていますが、私のエンコード手法では、ファイルの前後に付加された追加データが表示されています。
電話にファイルを保存し、そのコピーをユーザーにメールで送信したいと考えています。
NSData に再度変換する前に、配列を 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!)