2016-08-14 4 views
0

Coredata内に格納されているNSDate変数にAnyObjectとしてアクセスしてその日を印刷しようとしています。私がそれを印刷すると、nilを返します。 .dayなしでDateを印刷すると、正しい値が印刷されます。 編集:workoutDateはCoreDataは何の方法dayを持っていないNSDateを返しSwift:NSDate.day returns nil

let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context: NSManagedObjectContext = appDel.managedObjectContext 

     do { 
      let request = NSFetchRequest(entityName: "Workout") 
      let results = try context.executeFetchRequest(request) 

      if results.count > 0 { 
       for item in results as! [Workout]{ 


        let time = item.valueForKey("workoutTime") 
        let currentWorkoutDate = item.valueForKey("workoutDate") 
        let workoutDateDay = currentWorkoutDate! 
        print(workoutDateDay) 
        print(workoutDateDay.day!) 

答えて

2

NSDateは、dayという特性を持たない。ただし、キー値は

let currentWorkoutDate = item.valueForKey("workoutDate") 

AnyObject?を返すメソッドのコードと、あなたは、そのオブジェクト (The strange behaviour of Swift's AnyObjectを比較)に任意の(既存)のObjective-Cのメソッドを呼び出すことができます。 dayNSDateComponentsのプロパティであるため、コンパイラは文句を言わない。しかし、実行時には、 オブジェクトがこのプロパティに応答しないため、 workoutDateDay.daynilであることが検出されます。 、

if let workoutDate = item.valueForKey("workoutDate") as? NSDate { 
    // ... 
} 

以上エンティティ ためNSManagedObjectサブクラスを作成し、プロパティアクセサを使用する:

溶液をNSDateオブジェクトに値を変換することです。

次に、このような場合は、私が入力した後に終止符(ピリオド)を追加するときに、なぜそれがオプションとしてポップアップしない例えば

if let workoutDate = item.valueForKey("workoutDate") as? NSDate { 
    let day = NSCalendar.currentCalendar().component(.Day, fromDate: workoutDate) 
    print(day) 
    // ... 
} 
+0

あなたの答えをありがとう。これは問題を解決します! –

+0

私は日を印刷しようとすると 'Type Intにメンバーがいません'というエラーが表示されます –

+0

@RyanHampton:コードを正確にコピーしましたか?わたしにはできる。 'component(.Day、fromDate:workoutDate)'メソッドは、その日をIntとして返します。戻り値で '.day'にアクセスする必要はありません。代わりに、 'components(.Day、fromDate:workoutDate) 'を使用してください。 –

1

「日」実体「ワークアウト」の属性であり、型です。 これを追加した場合、その方法に問題があります。

+0

、 日からNSDateComponentsを取得するためにNSCalenderメソッドを使用します仕事中の日付? –

+0

@RyanHamptonなぜならそれはanytypeなので、それは常にNSDateであることを知っているからです:currentWorkoutDate = item.valueForKey( "workoutDate")を! NSDate –

+2

@RyanHamptonそのALTキーを押しながら変数をクリックすると、Xcodeはその変数のタイプを教えてくれます。そうすれば、期待したタイプが解釈されているかどうかを常に知ることができます。 –