繁体   English   中英

从HTTP响应中的NSMutableData中提取数组

[英]Extracting array from NSMutableData in http response

使用iPhone SDK 4.0。 http请求的回调将数据作为NSData对象提供

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // Append the data received to our data
    [theData appendData:data];
}

在服务器上的php脚本中,我返回如下数组

var_dump($array).

我如何从iPhone上的NSMutableData对象'theData'中取回阵列。

谢谢

您有一个描述数组(或可能是几个数组?)的字符串,该字符串作为字节序列存储在NSMutableData对象中。 为了将其转换为数组,您将需要解析var_dump输出,这可能很费力。

如果您可以找到一个库(或滚动您自己的代码)以Apple plist格式返回数据,则您的任务将容易得多:您可以使用

[NSPropertyListSerialization propertyListFromData:mutabilityOption:format:errorDescription:]

它以NSData(或NSMutableData)指针为第一个参数。 请尝试http://code.google.com/p/cfpropertylist/作为起点。


从cfpropertylist页面上的示例代码中:

$plist = new CFPropertyList();
$td = new CFTypeDetector();  
$guessedStructure = $td->toCFType( $array );
$plist->add( $guessedStructure );
// and then return the plist content with
$plist->toXML()

并在您的iOS代码中:

NSString *errorString = nil;
NSArray *array = [[NSPropertyListSerialization 
                    propertyListFromData:theData
                    mutabilityOption:NSPropertyListImmutable
                    format:nil
                    errorDescription:&errorString] retain];

我可能会在iOS上使用YAJL,并且$ var = json_encode($ array); 在PHP中。 然后在iOS中,我将从NSData输入中解析该内容,例如:

YAJLParser *parser = [[YAJLParser alloc] initWithParserOptions:YAJLParserOptionsAllowComments | YAJLParserOptionsCheckUTF8];
parser.delegate = [[[MyArrayParserDelegate alloc] init] autorelease];
[parser parse:data];
NSArray *thePhpArrayReceived = parser.delegate.resultantArray;

请检查如何构造委托,并在此处获取YAJL获取YAJL +自述文件

PHP输出文本,因此您必须将NSData读取为NSString ,然后根据var_dump指定的格式解析出数组数据。 首先,以下代码段应将数组(以文本形式)打印到控制台:

NSString * dump = [[NSString alloc] initWithData:theData
                                        encoding:NSUTF8StringEncoding];

NSLog(@"%@", dump);
[dump release];

正如Seamus Campbell指出的那样,有更好的方法可以做到这一点。 另一个选择是从您的PHP脚本输出XML,然后使用Cocoa的XML解析方法检索数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM