如何从 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?
如何使用单个参数从 Javascript 调用 Objective-C 方法并在 Xcode 中处理它