2016-03-23 16 views
0

インタフェースビルダのコアデータにデータを設定できないため、月曜日から曜日をコアデータに挿入する必要がありますこのアプリは、最初に次のように開いたときに...コアデータ - 最初のオープン時に初期データを作成してからNSTableViewにロードする

let firstLaunchCheck = NSUserDefaults(suiteName: "nonya-buisness ;)") 

    if firstLaunchCheck?.boolForKey("firstLaunch") == false { 
     print("First Launch") 


     let appDel = NSApplication.sharedApplication().delegate as! AppDelegate 
     let context = appDel.managedObjectContext 

     let addDay = NSEntityDescription.insertNewObjectForEntityForName("Weekdays", inManagedObjectContext: context) 

     let dayIndex = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

     var dayNumber = 0 

     for day in dayIndex { 

      print(day) 

      addDay.setValue(day, forKey: "dayName") 
      addDay.setValue(dayNumber, forKey: "dayNumber") 

      if dayNumber >= 5 { 
       addDay.setValue(true, forKey: "dayHoliday") 
      } else { 
       addDay.setValue(false, forKey: "dayHoliday") 
      } 

      do { 
       try context.save() 
      } catch let error as NSError { 
       print("Could not save \(error), \(error.userInfo)") 
      } 

      dayNumber++ 
     } 

     firstLaunchCheck?.setBool(true, forKey: "firstLaunch") 
     firstLaunchCheck?.synchronize() 
    } else { 
     print("App has already been opened") 
    } 

イムのdayNameとdayNumberを保存する(例えば、水曜日は2である)、また日が休日であるかどうかwheatherか追加。デフォルトでは、土曜日と日曜日にそのセットが私の見解で

次は、loadメソッドのイムは私のデータをロードしようとしなかった(これは後に、ユーザによって変更することができます)、これは...イムは、私が思う立ち往生場所です

var TimetableData = [NSManagedObject]() 

super.viewDidLoad() { 
let appDel = NSApplication.sharedApplication().delegate as! AppDelegate 
    let context = appDel.managedObjectContext 
    let request = NSFetchRequest(entityName: "Weekdays") 
    request.sortDescriptors = [NSSortDescriptor(key: "dayNumber", ascending: false)] 

    do { 
     let results = try context.executeFetchRequest(request) 
     TimetableData = results as! [NSManagedObject] 
     print(TimetableData.count) 
     DayTableView.reloadData() 

    } catch { 
     print("There was a problem retrieving saved data") 
} 
} 

テーブルビューのデータを実際に表現すると、問題はあると思いますが、とにかくコードがヒアリングされます。

if tableView == DayTableView { 

     let savedData = TimetableData[row] 

      let cell : NextDayCell = DayTableView.makeViewWithIdentifier("nextDayCell", owner: self) as! NextDayCell 





      if savedData.valueForKey("dayHoliday") as? Bool == true { 
       cell.cellDayString.stringValue = savedData.valueForKey("dayName") as! String + " Weekday" 
      } else { 
       cell.cellDayString.stringValue = savedData.valueForKey("dayName") as! String 
      } 
      cell.dayNumberS.stringValue = "\(day)" 

      day++ 

      return cell 

} 

何らかの理由で、このコードは何らかの理由で、コアデータから1つしか読み込まれず、日曜日です。助けてください;事前にPさんに感謝してください

答えて

1

は、あなたが1 insertNewObjectForEntityForNameを行い、それぞれの日のために、このオブジェクトのプロパティを変更しています。解決策は毎日insertNewObjectForEntityForNameです。

+0

にする新しい方法に感謝し、うまくいきました。 – Eli

0

ここでの質問は本当にCoreDataについては、私はすぐにもう一つの答えがあると確信しています。

実際の要件は、曜日にアクセスについてであれば、単純なアプローチ

let dateFormatter = NSDateFormatter() 
// dateFormatter.weekdaySymbols = "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

for dayIndex in days 
{  
    print(dateFormatter.weekdaySymbols[dayIndex]) 
} 
+0

私のアプリはその曜日の周りを回っているので、このアプローチを使用しています。ちょうど曜日の名前以外の多くの情報が必要です。たとえば、これが追加されているテーブルビューは、すべての日の移動であり、データに応じてビューに表示される内容が変更されます。しかし、私のaddDay変数をforループの中に移動するだけで、曜日名を – Eli

関連する問題