2015-11-02 12 views
0

經典模式一到一個指針:一個設置一個指針指向一個PFObject:上存儲兩種PFObjects在解析

let fidoTheDog = PFObject(className: "Dog") 
fidoTheDog["owner"] = PFUser.currentUser() 
fidoTheDog.saveInBackground() 

指針存儲在fidoTheDog但不能在另一端:

我不知道我的狗是誰。我甚至不知道我是否擁有一隻狗。我要通過整個狗列表來找到哪隻狗是我的。

所以我一個指針到fidoTheDog我的狗一樣。

let fidoTheDog = PFObject(className: "Dog") 
fidoTheDog["owner"] = PFUser.currentUser() 
fidoTheDog.saveInBackgroundWithBlock { success, error in 
    let user = PFUser.currentUser() 
    user["dog"] = fidoTheDog 
    user.saveInBackground() 
} 

但是現在我有兩個請求,它很醜。

有沒有辦法在一端去存儲指針的兩端?

+0

你真的沒有去通過整個列表,你可以做一個查詢,其中關鍵'owner'等於你的用戶。 – EmilioPelaez

+0

@EmilioPelaez你不知道,但系統會通過表找到匹配,索引與否。如果你知道你在找什麼 –

+0

這是更多的工作,是的,但是服務器可能使用二進制搜索來找到所有者,非常快('O(log n)',不如'O(1)',但仍然非常好)。你也可能冒着不一致的引用,其中'OwnerA'的狗是'Dog1','Dog1'的所有者是'OwnerB'。即使你沒有遇到這種情況,只需設置狗的主人,業主就可以擁有多隻狗。兩種選擇都有其優點和缺點。如果你想要兩個引用,你可以使用'saveAll',就像我在亞歷山大的評論中提到的那樣。 – EmilioPelaez

回答

1

如果創建狗PFObject並將其設置爲用戶的狗屬性,然後保存用戶,分析應該遞歸保存它指向的任何PFObjects。

let fidoTheDog = PFObject(className: "Dog") 
    fidoTheDog["owner"] = PFUser.currentUser() 
    PFUser.currentUser()!["dog"] = fidoTheDog 
    PFUser.currentUser()!.saveInBackground() 
+0

沒有工作......'user.saveInBackground()'不會創建'Dog'對象 –

+0

@rayjohn在這種情況下,您可以使用'PFObject.saveAll([dog,user])'保存這兩個對象。 saveAll'調用是一個請求。 – EmilioPelaez

+0

我編輯它不創建一個新的用戶變量。我認爲使用let來創建新用戶不會讓你編輯「狗」變量。 –