如何比较抓取的ObjectID和字符串



我有一个视图控制器,在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。文本永远不会改变。以下是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 ?

我明白了。在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...")
                }
            }

相关内容

最新更新