我有一个视图控制器,可以显示Core Data中项目的详细信息。要查找的特定项目将从前一个控制器传递给控制器。
以下是基本代码:
class ItemDetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var itemLabel: UILabel!
var selectedItemObjectID:String!
override func viewDidAppear(animated: Bool) {
//Fetch the the list of items from the context
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var request = NSFetchRequest(entityName: "Item")
var context:NSManagedObjectContext = appDel.managedObjectContext!
var error: NSError?
var results:NSArray = context.executeFetchRequest(request, error: &error)!
//optional, avoids potential compiler error
request.returnsObjectsAsFaults = false
if (results.count > 0) {
for fetchResult in results {
println("POPULATING THE DETAILS PAGE...")
println("fetchResult.objectID is \(fetchResult.objectID)")
println("selectedItemObjectID is \(selectedItemObjectID)")
//If the array entry matches the data passed to us, then populate the item details screen
if (fetchResult.objectID == selectedItemObjectID) {
itemLabel.text = fetchResult.valueForKey("itemName") as? String
} else {
println("No items in the database...")
}
}
我遇到的问题是,在我看来,我相互比较的objectID看起来完全一样。然而,if语句未被触发,并且itemLabel.text永远不会被更改。当for循环遍历应该匹配的那个时,这是输出:
POPULATING THE DETAILS PAGE...
fetchResult.objectID is 0xd000000000080000 <x-coredata://5F0AE77F-A83A-41BC-9361-0DE37F120776/Item/p2>
selectedItemObjectID is 0xd000000000080000 <x-coredata://5F0AE77F-A83A-41BC-9361-0DE37F120776/Item/p2>
它们看起来完全一样!我的if语句是否形成错误?我是否会以错误的方式使用objectID?
答案 0 :(得分:0)
我明白了。在if比较中,我需要使用fetchresult.fetchResult.objectID.description而不是fetchresult.fetchResult.objectID。
请参阅下面的更正代码:
class ItemDetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var itemLabel: UILabel!
var selectedItemObjectID:String!
override func viewDidAppear(animated: Bool) {
//Fetch the the list of items from the context
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var request = NSFetchRequest(entityName: "Item")
var context:NSManagedObjectContext = appDel.managedObjectContext!
var error: NSError?
var results:NSArray = context.executeFetchRequest(request, error: &error)!
//optional, avoids potential compiler error
request.returnsObjectsAsFaults = false
if (results.count > 0) {
for fetchResult in results {
println("POPULATING THE DETAILS PAGE...")
println("fetchResult.objectID is \(fetchResult.objectID)")
println("selectedItemObjectID is \(selectedItemObjectID)")
//If the array entry matches the data passed to us, then populate the item details screen
if (fetchResult.objectID.description == selectedItemObjectID) {
itemLabel.text = fetchResult.valueForKey("itemName") as? String
} else {
println("No items in the database...")
}
}