2016-04-10 6 views
1

私はCore Dataの新しい手であり、NSPredicateのクエリ文を書く方法を知りませんし、いくつかの問題を抱えています。私の問題とは、私の例aim.For私のクエリを達成するために、いくつかの提案を与え、今私は、テーブルには、それはいくつかのデータを持っています。(映像ショーとして)My databaseコアデータのクエリ文をNSPredicateでコード化する方法がわかりません

月属性を持つテーブル内のデータ「2015/03/01 00:00:00 "今、2015/03で始まる日付を検索したい、" fetchRequest.predicate = NSPredicate(format: "month BEGINSWITH [cd]%@/0%@ (年= 2015、月= 03) "、または" fetchRequest.predicate = NSPredicate(形式: "月LIKE [C]%@/0%@"、年、月) もしそうでなければ、私は本当に誰かが私を助けることを願っています。 D別の質問には、[]で「CD/C」である、それは構造を設定されているものを意味次のようにコードを:??

func remove(model:MonthlySummery) -> Int { 
    let cxt = self.managedObjectContext! 
    let entity = NSEntityDescription.entityForName("MonthlySummery", inManagedObjectContext: cxt) 
    let component = NSCalendar.currentCalendar().components([.Year,.Month], fromDate: model.month!) 
    let year = component.year 
    let month = component.month 
    let fetchRequest = NSFetchRequest() 
    fetchRequest.entity = entity 
    NSLog("month == %i/0%i", year,month) 
    fetchRequest.predicate = NSPredicate(format: "month BEGINSWITH[cd] %@/0%@", year,month) 
    do{ 
     let listData = try cxt.executeFetchRequest(fetchRequest) as NSArray! 
     if listData.count > 0 { 
      let dailyRecord = listData.lastObject as! NSManagedObject 
      cxt.deleteObject(dailyRecord) 
      if cxt.hasChanges { 
       try cxt.save() 
      } 
     } 
    } catch { 
     NSLog("Remove failure!") 
     let nserror = error as NSError 
     NSLog("Error: \(nserror), \(nserror.userInfo)") 
    } 
    return 0 
} 

答えて

1

フォーマットされた日付文字列を頼ることで日付を解析することは悪い考えです。

適切な日付を使用するようにコードをリファクタリングします。 NSManagedObjectサブクラスは、タイプがNSDateのプロパティを持つ必要があります。実際のSQLiteデータベースでは、これは長い数字で表されますが、それには関心がありません。あなたは、特定の月の開始日と終了日を計算し、このように述語を使用

NSPredicate(format: "month >= %@ && month < %@", start, end) 
+0

はムンディ@ありがとう、私はつもりです、今、私はこの問題を解決するための別のアイデアを持って、それを得ますNSDataFormatterで必要なフォーマットを設定できるので、月の属性をNSDateからStringに変更します。たとえば、月の文字列が必要な場合は、dateFormat = "yyyy-mm"を設定できます。 、私はdataFormat = "yyyy-mm-dd"を設定することができます。そう思いますか? – Jixes

+0

私が言ったように、これは潜在的に悲惨な考えです。日付を表すために使用されるNSDateを使用する必要があります。文字列はこの仕事をするのはあまり良くありません。 – Mundi

+0

NSDateを使って日付を表現すると、述語文をコードする方法がわかりません.NSDateのデフォルトの形式は "2015/04/12 00:00:00"です。データはある日に「2015/04/12 00:00:00」に「00:00:00」は必要ありません。月にデータを照会する必要がある場合は、「/ 12 00 「00:00」の「2015/04/12 00:00:00」に「2015/04」が必要ですか?理解していますか?質問文をコード化するように教えてもらえますか?非常に感謝します – Jixes

関連する問題