从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?

Posted

技术标签:

【中文标题】从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?【英文标题】:Better way to get BOOL from ColdFusion boolean return type in Objective-C? 【发布时间】:2014-06-05 22:10:31 【问题描述】:

我的应用程序中有一个方法向服务器发送请求以检查用户当前是否已登录。此 ColdFusion 函数返回类型 boolean。当我NSLog返回的数据时,我得到的是:

<wddxPacket version='1.0'><header/><data><boolean value='true'/></data></wddxPacket>

目前,为了确定它返回的是 true 还是 false,我正在该返回的字符串中搜索子字符串“true”。这似乎不是一个好的解决方案。我的问题是,有没有更好的方法从这个函数中获得 Objective-C BOOL?如果更改 ColdFusion 功能更好,我很幸运可以做到。谢谢!

ColdFusion 功能:

<cffunction name="loggedIn" returnType="Boolean" output="false" access="remote">
    <cfargument name="sessionID" type="UUID" required="true">
    <cfquery name="q_session" datasource="#request.db_dsn#">
        SELECT ...
    </cfquery>
    <cfreturn q_session.recordCount gte 1>
</cffunction>

Objective-C方法sn-p:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:myURLVar];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setHTTPBody:postData];

    NSError *requestError = [[NSError alloc] init];
    NSHTTPURLResponse *response = nil;
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request
                                            returningResponse:&response
                                                        error:&requestError];

    NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", responseData);
    if ([responseData rangeOfString:@"true" options:NSCaseInsensitiveSearch].location != NSNotFound)
        sessionIsActive = YES;
    

【问题讨论】:

如果您在发出请求时将 returnformat=json 添加到 URL,它将以 JSON 格式返回 - 这更容易解析。 【参考方案1】:

我认为您可以将returnFormat="plain" 添加到您的cffunction

plain:保证返回值是ColdFusion可以直接转成字符串的类型,不序列化返回字符串值。有效类型包括所有简单类型,例如数字和 XML 对象。如果返回值是复杂类型,例如数组或二进制值,ColdFusion 会生成错误。如果指定返回类型属性,其值必须是 any、boolean、date、guid、numeric、string、uuid、variablename 或 XML;否则,ColdFusion 会产生错误。

默认情况下,ColdFusion 将除 XML 之外的所有返回类型(包括简单返回类型)序列化为 WDDX 格式,并将 XML 数据作为 XML 文本返回。

应该只给你字符串,这样解析起来会更简单。

[source]

【讨论】:

以上是关于从 Objective-C 中的 ColdFusion 布尔返回类型获取 BOOL 的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章

从 iOS 中的私钥派生的证书(Objective-C)

从objective-C文件激活swift文件中的功能

如何从Objective-C中的异步内部函数内部返回外部函数

如何从Objective-C中的异步内部函数内部返回外部函数

如何从objective-c类推送一个快速视图控制器并将数据传回并继续objective-c类中的下一个过程

Objective-C/iOS:如何从 CoreData 中的属性中删除“值”?