2010-08-03 85 views
2

使用iphone sdk 4.0。对于HTTP请求的回调提供了数据的NSData对象从http响应中的NSMutableData中提取数组

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

在服务器上我的PHP脚本我正在返回一个数组如下

var_dump($array). 

如何让我的阵列回来从NSMutableData对象'theData'obove在我的iphone上。

由于

回答

3

你有一个字符串来描述你的数组(或者可能是几个数组?)作为一系列字节存储在NSMutableData对象中。为了将其重新转换为数组,您将需要分析var_dump输出,该输出可能很艰难。

如果你能找到一个库(或滚你自己的代码)在苹果的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]; 
+0

重用这个美丽的工作对我来说 的NSMutableDictionary *字典= [[NSPropertyListSerialization propertyListFromData:myNSMutableData mutabilityOption: NSPropertyListImmutable格式:nil errorDescription:&errorString] retain]; – jcpennypincher 2011-09-09 21:53:18

0

PHP输出文本,以便你将不得不读取NSData作为NSString然后根据由var_dump指定的格式解析出阵列数据。作为一个起点,下面的代码片段应打印出数组(文本)到您的控制台:

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

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

由于Seamus Campbell指出,有这样做的更好的方法。另一个选择是从PHP脚本输出XML,然后使用Cocoa的XML解析方法来检索数组。

+0

感谢,这是数组的格式 class userInfo {0} {0} $ var $ user,$ created; } 用户是一个字符数组,创建一个unix时间戳 然后我将这些对象添加到一个循环中的数组,然后返回 一个var_dump。 $ userInfo = new userInfo() 填入详细信息等然后添加到数组 $ array [] = $ userInfo; 循环后 var_dump($ array); 我很新的PHP所以有一点困惑如何从服务器返回这个东西,然后如何在目标C – tech74 2010-08-03 22:47:45

1

我可能会使用YAJL iOS设备和$ VAR = json_encode( $阵列);在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