2017-03-05 94 views
0

我有一个EventDec实体,它具有eventStatus属性,我只想显示该属性的结果。这里是我的代码二元运算符不能应用于NSpredicate和int

let fetchRequestDec = NSFetchRequest<NSFetchRequestResult>(entityName: "EventDec") 
    fetchRequestDec.predicate = NSPredicate(format:"eventStatus = %i") 
    let result = fetchRequestDec.predicate 
if (result == 1) 
    { 
     print("Status = 1") 
    } 
    else 
    { 
     print("Status = 2") 
    } 

所以我正在过滤错误,因为我得到这个错误。我该如何解决这个问题?

二元运算符“==”不能应用于NSpredicate和int

+1

这不是过滤,它是结果== 1行。结果是一个NSPredicate,1是一个int,因此不能使用二元运算符'=='。 – dylanthelion

+0

好的,那么如何解决 – Coder221

+0

要么给结果分配一个int值(让结果= 4,或其他),要么将它与另一个NSPredicate(如果结果== NSPredicate(格式:“eventStatus = 6”))进行比较。我无法确切地告诉你该做什么,没有关于此代码段应该做什么的更多信息。你究竟在检查什么? – dylanthelion

回答

1

你为什么要使用一个谓词?你的问题似乎想要返回EventDec对象并打印eventStatus属性。您需要执行提取。获取结果数组。提取你想要的。不需要过滤。

let fetchRequest: NSFetchRequest<EventDec> = EventDec.fetchRequest() 
if let results = try? context.fetch(fetchRequest) { 
    for result in results { 
    print("Status = \(result.eventStatus)") 
    } 
} 

这假定您的managedObjectContext被称为上下文。 此外,你有一个错字eventStaus而不是eventStatus

+0

感谢您指出错字。但是这并不起作用 – Coder221

+0

刚刚意识到我自己的代码中的仍然在fetchRequest中。如果你把它改成'let fetchRequest:NSFetchRequest = EventDec.fetchRequest()'有帮助吗? – Magnas

+0

我试过,它只是打印出状态= /(result.eventStatus) – Coder221

1

好吧,很高兴我在操场检查这一点,因为苹果公司进行了大量的子变化与雨燕3.0。试试这个,打印您的谓词的int值(你也可以访问该值,通过改变代码位):

let index = fetchRequestDec.predicate.predicateFormat.index(fetchRequestDec.predicate.predicateFormat.endIndex, offsetBy: -1) 
print("Status: \(Int(String(fetchRequestDec.predicate.predicateFormat[index]))!)") 
+0

类型'NSFetchRequest '的值没有成员谓词格式 – Coder221

+0

哦,是的,对不起,该属性是NSPredicate。我现在就更新我的答案。 – dylanthelion

+0

fetchRequestDec应该是什么?因为我没有看到你涉及eventStatus属性。所以我得到零(致命错误) – Coder221

相关问题