【问题标题】:How to compare fetched ObjectID with string?如何将获取的 ObjectID 与字符串进行比较?
【发布时间】:2015-07-13 18:38:46
【问题描述】:

我有一个视图控制器,它显示核心数据中项目的详细信息。要查找的特定项目从前一个控制器传递给控制器​​。

这是基本代码:

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 吗?

【问题讨论】:

  • 您的代码与输出不匹配(“selectedItemObjectID”与“selectedAquariumObjectID”)。 – 您是否发布了您的真实代码?
  • 您的代码很难理解。您声明了 var selectedItemmObjectID(注意双 m),但稍后您将它与单 m(fetchResult.objectID == selectedItemObjectID)一起使用。此外,fetchResult.objectID == selectedItemObjectID 不应编译,因为您将NSManagedObjectIdString 进行比较。示例输出与代码(和变量类型)不匹配。你能提供更多最新的代码吗?
  • 谢谢,我编辑了。这是我的代码的精简版。我删掉了所有的废话,并试图留下重要的部分。它确实编译。我遇到的最大问题是如何测试字符串是否与 objectID 匹配。因为我的 if 语句似乎不起作用。

标签: ios swift if-statement comparison string-comparison


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2012-10-06
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多