1

私は、携帯電話内のセンサーを読み取り、センサー データをコアデータ 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!)
4

1 に答える 1

0

NSKeyedArchiver は必要ありません。クラスのアーカイブと復元用です。

配列を調べて、ユーザーに提示する形式で各アイテムのテキスト表現を作成する必要があります。

CocoaPods をすばやく検索すると、csv 形式のデータを生成する必要があるプロジェクトがいくつか見つかります。

これはあなたが必要とするものかもしれません。

csv はかなり単純なので、独自のコードを記述してデータを csv にフォーマットすることは合理的です。

于 2014-09-02T03:18:19.443 に答える