为什么我自然无法将一个对象的“ 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外)的所有其他字符串列都适用。每次都会引发异常错误。为什么会这样?
使用oneObj.objectId
代替您在上面的代码中尝试的内容。
将let ObjectIdFromParse = oneObj["objectId"] as! String
行更改为
let ObjectIdFromParse = oneObj.objectId as! String
从Parse documentation on PFObjects开始
objectId
,createdAt
和updatedAt
作为属性在每个PFObject上提供,因此您不必使用[""]
下标它们,而是通过.objectId
,.createdAt
,.updatedAt
到达它们在您的对象上。
您也不必强制向下转换为String,因为objectId始终是String(如您所述)。但是,您确实需要拆开可选项(说您知道此objectId存在)。因此,正确的代码行应为:
let ObjectIdFromParse = oneObj.objectId!
这个问题到现在已经有4年了,但是也许这个答案也可以对其他人有所帮助。
如果要存储.objectID的代表公用,则应使用引用该.objectID的对象的“ uriRepresentation”(URL)。
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
希望有帮助。