使用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'上取回我的数组。
由于
答案 0 :(得分:3)
你有一个字符串描述你的数组(或者几个数组?)存储为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];
答案 1 :(得分:1)
我可能会在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:Get YAJL + Readme
答案 2 :(得分:0)
PHP输出文本,因此您必须将NSData
读作NSString
,然后根据var_dump指定的格式解析数组数据。作为起点,以下代码段应该将数组(作为文本)打印到控制台:
NSString * dump = [[NSString alloc] initWithData:theData
encoding:NSUTF8StringEncoding];
NSLog(@"%@", dump);
[dump release];
正如Seamus Campbell指出的那样,有更好的方法可以做到这一点。另一个选择是从PHP脚本输出XML,然后使用Cocoa的XML解析方法来检索数组。