2014-09-02 1 views
1

포맷을 NSData 인코딩NSArray를 I 함께 특정 세션에 속하는 수치의 각 세트로, 휴대 전화 내에서 센서를 판독하고, 코어 데이터 SQLite는 모델 센서 데이터를 저장하는 프로그램을 걸었

프로그램은 사용자에게 특정 세션의 .csv 파일을 전자 메일로 보낼 수있는 옵션을 제공합니다.

이전에는 절대 해본 적이 없지만 위임자와 컨텍스트를 초기화하고 지정된 세션과 관련된 엔터티에 대한 핵심 데이터를 검색하여 문제를 해결했습니다. 세션 속성을 만족하는 엔티티는 데이터 필드 (gps, mag, accel, gyro)를 읽고 문자열에 넣습니다. 그런 다음 문자열이 배열에 추가됩니다. 모두 신속하게 완료되었습니다.

엔티티를 검색하고 배열을 만든 후에 전자 메일에 첨부 할 CSV 파일을 만들려고합니다. 파일이 성공적으로 첨부되었지만 내 인코딩 기술은 파일 앞에 추가되고 추가 된 데이터를 제공합니다.

전화로 파일을 저장하고 사용자에게 사본을 보내려합니다.

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

"내 데이터"

: 여기
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") 

가 앞에 붙어 추가 데이터입니다 : 여기

내가있는 NSData로 다시 변환하기 전에있는 NSArray에 배열을 변경해야 할 것입니다
“"#$'X$classesZ$classname¢%&WNSArrayXNSObjectWNSArray܆_NSKeyedArchiver(25:<IOT[fhrtvxz|~ÄÇÑ·Ø}KÁµÉQV_jmu~Üã*ù 

28,000 개의 엔티티가있는 대용량 데이터 세션에서 ~ 750 줄의 앞에 붙은 데이터가있을 수 있습니다.

제공 할 수있는 도움을 주시면 감사하겠습니다.

저는 iOS, Obj-C에 익숙하며 신속하므로 긍정적 인 결과가 있습니다. 아직 더 나은 방법을 발견하지 못했습니다.

감사합니다.

UPDATE : 단지 단위로 내 파일에있는 NSString 데이터 인코딩 및 쓰기를 사용하여 종료 :

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

당신은'NSKeyedArchiver'를 원하지 않습니다. 이것은 클래스를 보관하고 복원하기위한 것입니다. 배열을 통해 사용자에게 제시 할 형식으로 각 항목의 텍스트 표현을 작성해야합니다. – zaph

답변

0

당신은 NSKeyedArchiver를 원하지 않는다, 그것은 보관 및 복원 클래스입니다.

배열을 통해 사용자에게 제시 할 형식으로 각 항목의 텍스트 표현을 만들어야합니다.

CacoaPods를 빠르게 검색하면 csv 형식 데이터를 생성해야하는 several projects이 나타납니다.

This one이 필요할 수 있습니다.

csv는 매우 간단하므로 코드를 직접 작성하여 CSV 형식으로 데이터를 포맷하는 것이 좋습니다.

+0

감사합니다. 내 검색 도메인에 CocoaPods를 추가하겠습니다.csv는 쉽게 만들 수 있었기 때문에 NSString 인코딩과 증분으로 파일에 기록하는 작업을 마쳤습니다. – Mollyschamber

관련 문제