2014-12-15 1 views
0

필자는 UserData.plist에 새 데이터를 다시 작성하는 데 너무 가깝지만 쓸 수 있도록 새 데이터 사전을 올바르게 만드는 데 문제가 있습니다.이 데이터를 내 Plist에 어떻게 기록합니까? - Swift

func saveTriggerData(){ 

    //get current date 
    let date = NSDate() 

    //for each trigger, insert date,value 
    for (index,trigger) in enumerate(triggersList){ 
     //if trigger already exists in userData, just add a new date, value 
     if(triggersData[trigger] != nil){ 
      NSLog("Trigger " + trigger + " exists") 
      //get value of corresponding stepper 
      var value = Int(steppersList[index].value) 
      //get previous data for this trigger 

      //make a dictionary of new data 
      var newData: [NSDate: NSNumber] = [date: value] 
      triggersData.addEntriesFromDictionary(newData) 

      //insert new data 
      let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray 
      let documentsDirectory = paths.objectAtIndex(0) as NSString 
      let path = NSBundle.mainBundle().pathForResource("UserData", ofType: "plist") 
      //replace dict's Triggers value with our new Triggers 
      NSLog("\(userData)") 
      //userData.setObject(triggersData, forKey:"Triggers") 
      //let fileWritten = userData.writeToFile(path!, atomically: true) 
      //NSLog("Save trigger data: \(fileWritten)") 

     } 
     else{ //trigger does not yes exist in userData, add trigger name and then its date, value 
      NSLog("Trigger " + trigger + " does not yet exist") 
     } 

    } 

} 

결과 :

Triggers =  { 
     "Caffeinated Drinks" =   (
         (
       "2014-12-03 16:30:22 +0000", 
       2 
      ), 
         (
       "2014-12-04 16:30:02 +0000", 
       1 
      ) 
     ); 
     "Alcoholic Drinks" =   (
         (
       "2014-12-03 16:28:53 +0000", 
       3 
      ), 
         (
       "2014-12-04 16:29:33 +0000", 
       0 
      ) 
     ); 
     "2014-12-15 23:36:53 +0000" = 0; 
    }; 
} 

마지막 줄 "2014년 12월 15일 23시 36분 53초 0000"= 0;은 Alcoholic Drinks의 자녀가되어야합니다. 그래서 나는 가깝지만 아직 그곳에있는 것은 아니며, 나는 그것에 대해 미쳐 가고 있습니다. 어떤 도움이라도 대단히 감사하겠습니다.

아, 그리고 PLIST :

<key>Triggers</key> 
    <dict> 
     <key>Alcoholic Drinks</key> 
     <array> 
      <array> 
       <date>2014-12-03T16:28:53Z</date> 
       <integer>3</integer> 
      </array> 
      <array> 
       <date>2014-12-04T16:29:33Z</date> 
       <integer>0</integer> 
      </array> 
     </array> 
     <key>Caffeinated Drinks</key> 
     <array> 
      <array> 
       <date>2014-12-03T16:30:22Z</date> 
       <integer>2</integer> 
      </array> 
      <array> 
       <date>2014-12-04T16:30:02Z</date> 
       <integer>1</integer> 
      </array> 
     </array> 
    </dict> 

답변

0

귀하의 triggersData은 배열의 배열을 포함하는 사전입니다. 현재 newData (날짜에 키 번호가있는 사전)을 추가하고 있습니다. 대신 datevalue에서 배열을 만들고 해당 배열을 사전의 관련 항목에 추가해야합니다. 그래서, 대신 :

var newData: [NSDate: NSNumber] = [date: value] 
triggersData.addEntriesFromDictionary(newData) 

시도 :

var newData : [AnyObject] = [date, value] 
if var triggerArray = triggersData[trigger] as? [AnyObject] { 
    triggerArray.append(newData) 
    triggersData[trigger] = triggerArray 
} 

당신의 plist와 같은 형태로 데이터를 얻을 것이다. 그러나 만약 당신이라면 plist를 재구성 할 것입니다. 첫 번째 항목은 NSDate 유형이고 두 번째 항목은 NSNumber 유형이기 때문에 가장 낮은 수준의 배열은 [AnyObject] 여야합니다. 이는 잘못된 생각입니다.

+0

도움 주셔서 감사합니다. 그러나 "AnyObject '가 두 번째 줄의 [[AnyObject]]로 변환 할 수 없다는 오류가 나타납니다. –

+0

나는 triggersData가 [String : [[AnyObject]]] 였다고 추측했으나 그 오류는 [String : AnyObject]임을 의미합니다. 그에 따라 내 대답을 수정합니다. – pbasdf

+0

감사합니다. 그것은 그것을 고쳤다. –

관련 문제