【问题标题】:sudzc 101 (response issue)sudzc 101(响应问题)
【发布时间】:2012-02-18 01:56:55
【问题描述】:

我相信这对各位专家来说非常简单。 SUDZC 已设置,一切似乎都正常工作,但是当一个值返回给委托时,它为空。 NSLog 显示正确的 XML 响应,所以我知道它工作正常,但代码中的值显示为 null。 SUDZC 附带一个示例程序,这就是它的运行方式。我在返回“低俗小说”的网络服务“WhatsYourFavoriteMovie”上创建了一个测试函数。日志清楚地显示了这个值被返回。为什么最终值(null)?请帮忙,谢谢。

所以我打电话给...

[service WhatsYourFavoriteMovie:self action:@selector(WhatsYourFavoriteMovieHandler:) userid: 1];

然后当 Web 服务响应时,它会转到...

// Handle the response from WhatsYourFavoriteMovie.
- (void) WhatsYourFavoriteMovieHandler: (id) value {

// Handle errors
if([value isKindOfClass:[NSError class]]) {
NSLog(@"%@", value);
return;
}

// Handle faults
if([value isKindOfClass:[SoapFault class]]) {
NSLog(@"%@", value);
return;
}


// Do something with the NSString* result
NSString* result = (NSString*)value;
NSLog(@"WhatsYourFavoriteMovie returned the value: %@", result);
}

但是“值”和“结果”始终为“空”...正如您在下面的 NSLog 输出中看到的那样,它在标签中返回“低俗小说”。我哪里错了?

2012-02-17 17:27:41.487 SudzCExamples[2782:f803] Loading:     https://www.mydomain.com/tk_services/tk.asmx

2012-02-17 17:27:41.491 SudzCExamples[2782:f803] <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"     
xmlns="com.mynamespace"><soap:Body><WhatsYourFavoriteMovie>
<userid>1</userid></WhatsYourFavoriteMovie></soap:Body></soap:Envelope>

2012-02-17 17:27:41.497 SudzCExamples[2782:f803]
Applications are expected to have a root view controller at the end of application launch

2012-02-17 17:27:45.947 SudzCExamples[2782:f803]
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body>
<WhatsYourFavoriteMovieResponse xmlns="com.mynamespace">
<WhatsYourFavoriteMovieResult>Pulp Fiction</WhatsYourFavoriteMovieResult>
</WhatsYourFavoriteMovieResponse></soap:Body></soap:Envelope>

2012-02-17 17:27:45.949 SudzCExamples[2782:f803] WhatsYourFavoriteMovie returned the value: (null)"

再一次,正如您在日志中看到的那样,它从服务器获得了值“pulp小说”,但日志的最后一行显示它返回值“null”。请帮我!!谢谢。

【问题讨论】:

  • 查看 Phil Hale 的回答,我遇到了同样的问题,它对我有用。如果它解决了您的问题,请记住接受答案。

标签: objective-c ios4 soap sudzc


【解决方案1】:

我在使用 Sudzc 生成代码的 ARC 版本时遇到了完全相同的问题,但无论出于何种原因,非 ARC 版本都可以正常工作

更新

看看这个issue report。我做了第一条评论中建议的更改,ARC 版本运行良好。

【讨论】:

    【解决方案2】:

    请尝试 NSLog 在 didrecivedata 中的响应。在 SoapRequest.m 类中

    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)value {
    
        NSString *str=[[NSString alloc]initWithData:value encoding:NSUTF8StringEncoding];
    
        NSLog(@"data receives %@",str);
    
    }
    

    然后你就会知道确切的问题是什么。 完成此操作后发布响应,我们将根据此帮助您。

    【讨论】:

    • 当我将此日志记录添加到 SoapRequest.m 时,我会在响应中看到完整的 SOAP 信封。但是,我的处理程序(根据 Sudzc 文档编码)返回 null 值。有什么想法吗?
    • 我的日志和Kevin在原帖中添加的日志是一样的。 NSLog 显示返回的完整、正确的 SOAP 信封,但委托方法的 value 参数为 null。
    • 尝试在 Sudz 生成的文件中搜索以下代码并 NSLog 其对应值 [Soap getNodeValue: node withName: @"WhatsYourFavoriteMovieResult"]
    【解决方案3】:

    如果您使用的是 ARC 版本,请在 SoapRequest 中更改该行

    CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"Body"] childAtIndex:0];
    

    CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"soap:Body"] childAtIndex:0];
    

    【讨论】:

    • 这对我不起作用,我不明白为什么会这样。 “soap”是一个命名空间前缀——不是元素的名称。当代码为CXMLNode* element = [[Soap getNode: [doc rootElement] withName:@"Body"] childAtIndex:0]; 时,Sudzc 的非 ARC 版本可以正常工作,所以我认为这不是问题所在。
    • ...或者至少在所有报告的症状情况下,它并不总是解决问题的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2010-11-20
    • 2017-05-10
    • 2015-01-21
    相关资源
    最近更新 更多