2015-09-06 99 views
1

我有一個系統,噹噹前用戶接受請求時,我的應用程序在向當前用戶發送請求的用戶之間添加一個關係。將當前用戶保存到與swift分析的關係中

但是,我想也將當前用戶添加到其他用戶的關係,以便它不僅僅是當前用戶有一個關係。

我的代碼適用於當前用戶,但不適用於其他用戶。

//i use this pattern to add the requester to a friends relation to the current user 
    var relation = PFUser.currentUser()!.relationForKey("Friends") 
    relation.addObject(passenger as PFObject) 
    PFUser.currentUser()!.saveInBackground() 

當我嘗試爲旅客相同的模式不加關係

 var relation = passenger.relationForKey("Friends") 
     relation.addObject(PFUser.currentUser()!.self as PFObject) 
     passenger.saveInBackground() 

編輯1:

了大量的研究後,我發現這個答案,說我需要雲代碼。 https://stackoverflow.com/a/23305056/3822504這是唯一的方法還是有替代方案?有人可以提供雲代碼解決方案嗎?

編輯2:

我回答我自己的問題。您需要根據您的需要編輯雲代碼。幫助我的最重要的事情就是知道如何在雲代碼中查詢用戶類並使用雲代碼獲取當前用戶。

回答

0

好吧,過了一段時間,我能夠爲我的方案獲得解決方案。這應該適用於用戶接受其他用戶時的簡單關係。

首先我的swift代碼。請注意,我創建了一個將PFUser作爲參數的函數。我這樣做是爲了重構一個更大的函數。此用戶是我們想要將當前用戶保存到雲代碼中的用戶。

func createRelation(otherUser: PFUser) 
{ 

    let fromUser: PFUser = otherUser 
    let params = NSMutableDictionary() 
    params.setObject(fromUser.objectId!, forKey: "Friends") 


    PFCloud.callFunctionInBackground("addFriendToFriendsRelation", withParameters: params as [NSObject : AnyObject]) { 
     (object:AnyObject?, error: NSError?) -> Void in 

     //add the person who sent the request as a friend of the current user 
     let friendsRelation: PFRelation = self.currentUser!.relationForKey("Friends") 
     friendsRelation.addObject(fromUser) 
     self.currentUser!.saveInBackgroundWithBlock({ 
      (succeeded: Bool, error: NSError?) -> Void in 

      if succeeded { 
       println("Relation added to the current user") 


      } else { 

       println("Handle error in adding relation to current user ") 
      } 
     }) 
    } 

} 

現在的解析雲代碼

Parse.Cloud.define("addFriendToFriendsRelation", function(request, response) { 

    Parse.Cloud.useMasterKey(); 
    //get the friend requestId from params 
    var friendRequestId = request.params.Friends; 
    var query = new Parse.Query(Parse.User); 

    //get the friend request object 
    query.get(friendRequestId, { 
     success: function(friendRequest) { 

      //get the user the request was from 
      var fromUser = friendRequest; 
      //get the user the request is to 
      var toUser = Parse.User.current() ; 

      var relation = fromUser.relation("Friends"); 
      //add the user the request was to (the accepting user) to the fromUsers friends 
      relation.add(toUser); 

      //save the fromUser 
      fromUser.save(null, { 

       success: function() { 

        response.success("saved relation and updated friendRequest"); 

       }, 

       error: function(error) { 

       response.error(error); 

       } 

      }); 

     }, 

     error: function(error) { 

      response.error(error); 
     } 

    }); 

}); 

而且一定要使用命令parse deploy在解析目錄更新

+0

我複製並粘貼此代碼main.js,但得到錯誤: 2015-09-16 18:51:24.286 Gestern [6919:806406] [Error]:ReferenceError:parent is not defined at envalue(Parse.js:13:7510) at e.query.get .success(主要。js:60:22) at e。 (Parse.js:12:27827) 在ES(Parse.js:12:26759) 在envalue(Parse.js:12:26178) 在ES(Parse.js:12:26887) 在烯值(Parse.js:12:26178) at e。 (Parse.js:12:26831) at e.s(Parse.js:12:26759) at Parse.js:12:27145(代碼:141,版本:1.7.5) 可能是什麼問題?我沒有使用JavaScript的經驗... –

+0

@NickPodratz確保你實際上已經解析雲安裝,你也需要了解你如何規劃你的數據,並相應地使用代碼,我有一個非常具體的場景,但我通過我需要swift的id,還有一點需要注意的是分析不會爲你創建關係列,所以在你的用戶類中你需要添加 – kareem

+0

感謝你的建議,我已經對它進行了修改。我檢查是否設置了一切,然後學習了一些JavaScript以便爲我的目的正確構建代碼。但經過進一步研究後,我得出結論,這似乎是Parse SDK中的一個錯誤,因爲另一個用戶報告了類似的問題。 https://groups.google.com/forum/#!topic/parse-developers/-wmVSquWrVI。 –

0

這是唯一的方法,afaik。 按照本指南設置您的雲代碼環境中,如果您尚未:https://parse.com/apps/quickstart#cloud_code/unix

那麼你應該定義一個函數(代碼後建立將包含一個樣本的「Hello World」功能,這樣你就可以從中複製定義)。對於關係的修改,你應該參考其JS API文檔 - https://parse.com/docs/js/api/symbols/Parse.Relation.html

(注:爲了爲它工作,它應該containt Parse.Cloud.useMasterKey()行嘗試修改用戶之前)

後您的功能已實施並部署了雲代碼(解析部署),請在您的移動應用程序中使用PFCloud.callFunctionInBackground。

相關問題