2015-05-25 65 views
2

我有一個「地點」類和「簽入」類,以及特殊的「用戶」類。 「簽到」有一個指向「地點」和「用戶」的指針。簡單地說,用戶可以登錄他已經訪問過的地方。Parse.com關係和acl

「地點」類僅作爲讀取權限,而「登錄」具有讀取和寫入的權限。

創建「簽入」對象時,出現錯誤103:此用戶不允許執行更新操作。

我試着用關係代替指針,但仍然遇到同樣的問題。

我不希望「地點」對象是可更新的,我不明白爲什麼解析是內部嘗試更新它。

爲什麼會出現這種情況的任何想法,我如何建模數據以使其按照我的預期工作?

編輯:我添加了調用來創建簽入對象的代碼。可以看出,地方和用戶已經存在,所以我不打算更新它。

let checkin = PFObject(className: "checkin") 
    checkin["user"] = PFUser.currentUser() 
    let place = PFObject(className: "place") 
    place.objectId = shop.id 
    checkin["place"] = place 
    checkin.saveInBackgroundWithBlock { (saved: Bool, error: NSError?) -> Void in 
     if saved && error == nil { 
      success() 
     } else { 
      // 
     } 
    } 
+0

不知道是否有一個內部鏈接,索引什麼的,你當然可以做到這一點在雲代碼,因爲你可以使用主密鑰 – Wain

+0

我不知道,但可能是因爲這一行嗎? place.objectId = shop.id – Steve

回答

0

不分享任何代碼就有點難以診斷,因爲問題可能與您在代碼中嘗試執行的操作有關。我不能評論澄清,所以我會發布答案,我懷疑正在發生。如果情況並非如此,請評論或編輯您的帖子,我會很樂意嘗試進一步提供幫助。

該問題可能與您使用指針不相關......我使用指針並沒有像這樣的問題。

我認爲正在發生的是,根據您的權限,它不會讓雲創建適當的位置。如果你還沒有選擇「創造」一個地方的能力,這肯定是真的。我明白錯誤表明它是一個更新,但我之前也有不正確的/誤導性的錯誤。如果是這種情況,請允許創建。或者,如果您不希望公衆能夠創建場所,請確保當前用戶具有適當的ACL來執行此操作,或者正在運行的雲代碼正在使用主密鑰。

如果上述情況均不屬於您的情況,並且您不想共享代碼,我可以推薦其他解決方法。保留公開的總體類權限,以確保正確執行初始化。然後,可能在保存後的回調中,將ACL設置爲不寫。

編輯:意見如下地址添加的代碼

+0

感謝您的評論。我添加了代碼以防萬一。正如您所看到的,place已經存在,因此不需要創建或更新它,它將設置爲簽入對象的參數。 –

+0

@Jonatin我不熟悉你的一些語法,而且我也不確定是否由Parse支持「let」,但這些可能與你的問題無關。 但是,當您有 'let place = PFObject(className:「place」)' 您正在代碼中創建一個地點對象您還需要保存此對象以便它可以由父登錄對象稍後。 – papergodzilla

+1

@Jonatin我多想了一下你的代碼。你是否試圖將'checkin [「place」]'賦值給一個現有的'place'對象,該對象的id已經是'shop.id'? 爲此,您需要執行查詢。你不能簡單地設置這樣的id,你需要檢索你試圖引用的實際對象。也忽略我對語法的評論,並讓...我沒有注意到你的環境。 – papergodzilla

-1

我想你想查詢與shop.id的對象。我不是很熟悉的iOS編程,但在iOS查詢應該是這樣的:

PFQuery *query = [PFQuery queryWithClassName:@"GameScore"]; 
[query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *gameScore, NSError *error) { 
    // Do something with the returned PFObject in the gameScore variable. 
    NSLog(@"%@", gameScore); 
}]; 
// The InBackground methods are asynchronous, so any code after this will run 
// immediately. Any code that depends on the query result should be moved 
// inside the completion block above. 

https://parse.com/docs/ios/guide