[英]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.