如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?

Posted

技术标签:

【中文标题】如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?【英文标题】:How to access response.body from a JavaScript function called in Objective-C? 【发布时间】:2014-06-27 19:50:08 【问题描述】:

我正在使用 Parse Cloud Code 为我的 ios 应用处理一些服务器端逻辑。

我查询 Parse chatRooms 对象。如果存在所需的对象,我可以毫无问题地访问它,但如果我必须使用外部 javascript 函数创建它(以解决用户权限问题),我将无法访问由所述 JS 函数返回的对象。

iOS 视图控制器

-(void)chatRoomQuery

   ....

    [combinedChatRoomQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) 
        if (![objects count] == 0) 
            [self.chatButton setTitle:@"continue chat with this user" forState:UIControlStateNormal];
            self.selectedChat = objects[0];
        
        else if ([objects count] == 0)
            [self.chatButton setTitle:@"create new chat with this user" forState:UIControlStateNormal];
            [PFCloud callFunctionInBackground:@"addUsersToChatRoom" withParameters:@@"user1" : [PFUser currentUser].objectId, @"user2" : self.giveItem.itemGiver.objectId block:^(id object, NSError *error) 
                self.selectedChat = response.body.currentChat;
            ];
        ;
    ];


“else if”块调用这个 JavaScript 函数保存到我的 Parse Cloud 代码:

Parse.Cloud.define("addUsersToChatRoom", function(request, response)

  Parse.Cloud.useMasterKey(); 

  var user1id = request.params.user1;
  var user2id = request.params.user2;

  var User = Parse.Object.extend("User");
  var user1 = new User( objectId: user1id );
  var user2 = new User( objectId: user2id );

  var ChatRoom = Parse.Object.extend("ChatRoom");
  var currentChat = new ChatRoom();

  currentChat.set("user1", user1);
  currentChat.set("user2", user2);

  currentChat.save(null, 
    success: function(currentChat)
        console.log("YEAAA the chat room is saved");
        response.body = currentChat;
    ,
    error: function(currentChat, error)
        console.log("FAILED to save chatroom" + error.message);
    
  );

);

正如您在我的 iOS 代码示例中看到的那样,在 else if 块下,我设置了

self.selectedChat = response.body.currentChat;

但我收到 错误

Use of undeclared identifier "response"

如何访问我的 JavaScript 函数的 response.body?

【问题讨论】:

【参考方案1】:

您的云代码应该返回成功方法,而不是设置 body 属性:

response.success(currentChat);

您的 iOS 代码应该访问返回的对象,而不是不存在的响应正文:

self.selectedChat = object;

【讨论】:

太棒了,感谢您的快速正确回答。您介意回答为什么会这样吗? 这就是它的工作方式。 response.success() 或 response.error() 来响应云函数,而“对象”是在云函数的延续块中定义的。

以上是关于如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 调用 Objective-C 类的工厂方法?

如何从 Objective-C 中调用的 JavaScript 函数访问 response.body?

如何从别处调用 Objective-C 对象的超类的方法?

如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它

在 Objective-C 中使用类别的私有方法:从子类调用 super

从 Swift 测试文件中调用 Objective-C 类