2

iOS では、Salesforce でホストされている残りのリソースを呼び出しています。

@HttpPost
    global static String getEmail(String app, String BorrowerId, String BorrowerName) {
        System.debug('hit the web service');
        System.debug(app);
        System.debug(BorrowerId);
        System.debug(BorrowerName);

        JSONGenerator gen = JSON.createGenerator(true);
        gen.writeStartObject();
        gen.writeStringField('email', 'woohoo');
        gen.writeEndObject();

        String jsonString = gen.getAsString();
        System.debug(jsonString);
        return jsonString;
    }

返される jsonString は次のとおりです: { "email" : "woohoo" }

デバッグログに示されているように。ただし、iOS でこの応答を受信しようとすると:

- (void)request:(SFRestRequest *)request didLoadResponse:(id)jsonResponse
{
    NSLog(@"json response: %@", jsonResponse);
    NSString *retString = [NSString stringWithFormat:@"%@", jsonResponse];
    NSLog(@"records: %@", retString);
}

次のエラーが表示されます: WARNING error parsing json: Error Domain=NSCocoaErrorDomain Code=3840 "The operation could't be completed. (Cocoa error 3840.)" (JSON テキストが配列またはオブジェクトで開始されておらず、フラグメントを許可するオプションが設定されていません.) UserInfo=0xcbaf230 {NSDebugDescription=JSON テキストが配列またはオブジェクトで開始されておらず、フラグメントを許可するオプションが設定されていません。}

また、Salesforce でオブジェクトを返そうとしましたが、同じエラーが返されます。データを NSString として読み戻すにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

Web サービスが Map を返すようにします。

@HttpPost
global static Map<String, String> getEmail(String app, String BorrowerId, String BorrowerName) {
    System.debug('hit the web service');
    System.debug(app);
    System.debug(BorrowerId);
    System.debug(BorrowerName);

    Map<String, String> emailData = new Map<String, String>{'email' => 'woohoo'};
    return emailData;
}

これにより、レスポンスを NSDictionary として扱うことができます

- (void)request:(SFRestRequest *)request didLoadResponse:(id)jsonResponse {
   NSString *emailString = [jsonResponse objectForKey:@"email"];
   NSLog(@"email: %@", emailString);
}

POST リクエストはレコードの作成用に予約する必要があるため、これを GET としてやり直すことを検討してください。

于 2013-10-25T23:02:19.320 に答える