チャットルームに2人のユーザーを追加するためにクラウドコードを使用していますが、クラウドコード関数を呼び出すとアプリがクラッシュします。
私のiOSviewControllerでは、ユーザーが次のメソッドを呼び出すボタンをクリックします。
-(void)createChatRoom
{
PFQuery *queryForChatRoom = [PFQuery queryWithClassName:@"ChatRoom"];
[queryForChatRoom whereKey:@"user1" equalTo:[PFUser currentUser]];
[queryForChatRoom whereKey:@"user2" equalTo:self.giveItem.itemGiver];
PFQuery *queryForChatRoomInverse = [PFQuery queryWithClassName:@"ChatRoom"];
[queryForChatRoomInverse whereKey:@"user1" equalTo:self.giveItem.itemGiver];
[queryForChatRoomInverse whereKey:@"user2" equalTo:[PFUser currentUser]];
PFQuery *combinedChatRoomQuery = [PFQuery orQueryWithSubqueries:@[queryForChatRoom, queryForChatRoomInverse]];
[combinedChatRoomQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if ([objects count] == 0){
[PFCloud callFunctionInBackground:@"addUsersToChatRoom" withParameters:@{@"user1" : [PFUser currentUser]} block:^(id object, NSError *error) {
[self performSegueWithIdentifier:@"itemToChatSegue" sender:nil];
}];
};
}];
}
これが私のParseCloudに保存されているJavaScript関数です。
Parse.Cloud.define("addUsersToChatRoom", function(request, response){
response.success("Jared this method call works, no implement it");
console.log("this is being logged to the console");
var user = response.body.user1;
console.log(user);
});
ボタンを押してこのメソッドを呼び出すと、アプリがクラッシュし、次のようなエラーが出力されます。
[PFInternalUtils encodeObject:allowUnsaved:allowObjects:]
[PFInternalUtils encodeObject:allowUnsaved:allowObjects:]
[PFCloud callFUnctionAsync:withParameters:]
[PFCloud callFunctionInBackground:withParameters:block:]
__36-[MyViewController createChatRoom]_block_invoke
__40-[PFTask thenCallBackOnMainThreadAsync:]_block_invoke_2
このエラーからどのように前進できますか?
エラーが解決されたら、クラウドコードの出力をどこで読み取ることができますか?curlを使用してアプリのクラウドコード(https://parse.com/docs/cloud_code_guide)をヒットすると、指定された「Helloworld!」が表示されます。出力ですが、この場合、Objective-cコードからJS関数を呼び出しているので、コンソール出力をどこで監視できるかわかりません。(最終的には、現在JS機能にあるコンソール出力を、探している実際の機能に置き換えます。)
このエラーメッセージ出力の意味を理解するにはどうすればよいですか?
PFUser currentUserはオブジェクトに応答しますが、シリアル化可能なタイプのディクショナリ(ユーザーIDやユーザー名など)をに渡す必要がありますcallFunctionInBackground:withParameters:
。また、クラウド関数はまたはのいずれresponse.success()
かを呼び出す必要がありますresponse.error()
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加