2016-11-24 3 views
0

나는 MongoDB의에서 데이터 객체를 저장할 :MongoDB에서 Swift Data 또는 NSData를 저장하고 검색하는 방법은 무엇입니까?

그것은 NSURLSession 사용 CryptoSwift

let bytes = dataString.utf8.map({$0}) 
let encrypted = try! ChaCha20(key: getAESP(), iv: "zzzzzzzzzzzzzz").encrypt(bytes) 
let encryptedData = Data(bytes: encrypted) 

를 사용하여 생성되고 서버로 전송 있어요 : 내 모델 방식에서

let postData = NSMutableData(data: "patient_id=\(patientID)".data(using: String.Encoding.utf8)!) 
postData.append("&data=".data(using: String.Encoding.utf8)!) 
postData.append(encryptedData)   
let request = NSMutableURLRequest(url: NSURL(string: "\(url)api/patient/document")! as URL, 
              cachePolicy: .useProtocolCachePolicy, 
              timeoutInterval: 10.0) 

을 나는 등의 데이터를 설명 버퍼 :

var DocumentSchema1 = new Schema({ 
     created_at:Date, 
     created_by:String, 
     document_type:String, 
     document_name:String, 
     data: Buffer, 
     modifications: [ 
      { 
       modified_by: String, 
       modified_at: Date, 
       data: Buffer 
      } 
     ], 
     isDeleted: Boolean, 
     deleted_at: String, 
     deleted_by: String, 
    }) 

문제는 이 접근 방식은 웹 서비스에서 반환 된 JSON이 데이터가 아닌 버퍼 유형이며 아래의 신속 조건이 실행되지 않는다는 것입니다.

if let dataString = dict["data"] as? Data{ 

Mongo에서 이진 데이터를 다시 가져 와서 Swift에서 사용하려면 어떻게해야합니까?

EDIT2 다음 zaph의 답변에 따라이 : 그래서 데이터 요소 INT64 (35) 내가 캐스팅 할 수있는 유일한 방법은 Array<AnyObject>이다하지만이 형태로 주어진 데이터로 변환 할 수 없습니다와 __NSArrayI로 제공됩니다. 에 캐스팅

시도 :

  • Array<Int64>
  • [UINT64]
  • [UINT8]
  • [INT64]
  • UnsafeRawPointer

에 실패했습니다.

if let a = dataDict["data"] as? Array<Int64> 
+0

힌트 : 당신은 일반적인 암호화 암호화 속도에서 AES를 사용하는 경우 크기가 더 빠르다. – zaph

+0

'init (bytes : UnsafeRawPointer, count : Int)'시도해 바이트로부터'Data' 객체를 생성하십시오. – zaph

+0

어떻게 UnsafeRawPointer를 얻을 수 있습니까? 업데이트 된 질문을 확인하십시오. –

답변

0

심하게이라는 바이트의 배열 dataString입니다 가정 :

let dataString :[UInt8] = [0x41, 0x42, 0x43, 0x44] 
print("dataString: \(dataString)") 
let data = Data(bytes:dataString, count:4) 
print("data: \(data)") 
print("data as hexadecimal: \(data.map { String(format: "%02hhx", $0) }.joined())") 

출력 :

dataString: [65, 66, 67, 68] 
data: 4 bytes 
data as hexadecimal: 41424344 
+0

고맙습니다. 나는 아직도 그것에 고심하고있다. 내 최신 편집 좀 봐 주시겠습니까? 오늘 밤까지 당신의 대답을 보지 못했습니다. 내 알림은 꺼져 있어야합니다. –

관련 문제