【问题标题】:How to grab ObjectId from object in parse and present it as string in swift如何从解析中的对象中获取 ObjectId 并在 swift 中将其呈现为字符串
【发布时间】:2016-01-25 06:51:48
【问题描述】:

为什么我无法将来自解析的对象中的“ObjectId”快速呈现为字符串,即使它自然已经是字符串?这是我尝试使用的逻辑:

//MARK: Fetch ObjectId Strings From Parse
    func fetchObjectIdString() {

        let query = PFQuery(className: "Books")
        query.whereKey("genreName", equalTo: self.genreName)
        query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

            if error == nil {

                if let objects = objects as [PFObject]! {

                    for oneObj in objects {

                        let ObjectIdFromParse = oneObj["objectId"] as! String
                        let SingleObjectId = SixthBook()
                        SingleObjectId.objectIdString = ObjectIdFromParse
                        self.arrayOfObjectId.append(SingleObjectId)
                    }
                }
            } else {

                // Log details of the failure
                print("Error: \(error!) \(error!.userInfo)")
            }
        }
    }

这适用于我的解析对象的所有其他字符串列,除了 ObjectId。每次都会抛出异常错误。这是为什么呢?

【问题讨论】:

    标签: ios swift object parse-platform


    【解决方案1】:

    使用oneObj.objectId 而不是您在上面的代码中尝试的。

    let ObjectIdFromParse = oneObj["objectId"] as! String行改为

    let ObjectIdFromParse = oneObj.objectId as! String

    【讨论】:

      【解决方案2】:

      来自Parse documentation on PFObjects

      objectIdcreatedAtupdatedAt 作为每个 PFObject 的属性提供,因此您不要使用 [""] 为它们下标,而是通过 .objectId.createdAt、@987654328 来访问它们@ 在你的对象上。

      您也不需要强制向下转换为字符串,因为 objectId 始终是字符串(如您所述)。但是,您确实需要解开可选项(假设您知道此 objectId 存在)。因此正确的代码行应该是:

      let ObjectIdFromParse = oneObj.objectId!
      

      【讨论】:

        【解决方案3】:

        这个问题到现在已经有 4 年了,但也许这个答案也可以帮助其他人。

        如果您想存储 .objectID 的代表公共,您应该使用引用该 .objectID 的对象的“uriRepresentation”(URL)。

        来自documentation

        func managedObjectID(forURIRepresentation: URL) -> NSManagedObjectID?

        例如,您有: 迅速 4

        do
        {
          let entity = try self.context.fetch(fetchRequest())
          let entityObj = entity.last as! Any
          let uriID = entityObj.objectID.uriRepresentation().absoluteString
        }
        catch
        { 
          print("Error...") 
        }
        

        记得在获取 ID 之前先 saveContext(),否则你会得到一个临时 ID。

        https://developer.apple.com/documentation/coredata/nsmanagedobjectid/1391691-temporaryid

        您可以找到更多:https://developer.apple.com/documentation/coredata/nspersistentstorecoordinator/1468882-managedobjectid

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-01
          • 1970-01-01
          • 2019-01-03
          • 1970-01-01
          相关资源
          最近更新 更多