如何将值从pHp服务器脚本返回到NSMutableData(Objective C,iOS)

Fat*_*via 1 php objective-c nsurlconnection nsmutabledata ios

好吧,我很难找到一个不只是使用JSON或ASIHTTPRequest的答案.但我认为我的问题更具体一些.我只是作为一个爱好编程,所以我不是专家.话虽如此,我对此的抽象理解可能完全偏离基础,所以这个问题可能无法回答.

基本上,我想要做的是向Web服务器上的pHp脚本发送HTTP请求,让Web服务器返回一个值,假设一个简单的整数值或bool值(想一个返回yes/no的登录脚本) ).我现在并不担心安全问题,因为我正试图让自己理解这一点.

从我收集的内容来看,我会使用一些东西来达到效果

// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.apple.com/"]
                    cachePolicy:NSURLRequestUseProtocolCachePolicy
                timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
   // Create the NSMutableData to hold the received data.
   // receivedData is an instance variable declared elsewhere.
receivedData = [[NSMutableData data] retain];
} else {
// Inform the user that the connection failed.
}  
Run Code Online (Sandbox Code Playgroud)

这是Apple的文档,我一般都明白这一点.所以我们假设它通过URL将信息发送到pHp文件,然后:

//pHp file gets information
//pHp file uses that information to check against a mySQL database
//pHp now has the variable $result with a value of 1 in it
Run Code Online (Sandbox Code Playgroud)

另外,假设我可以做到这一切.我的问题是,如何将pHp中的值返回到iOS'NSMutableData'变量.我是否"回应"它?例如:

echo "$result";
Run Code Online (Sandbox Code Playgroud)

然后将信息放入NSMutableData(变量$ result)?我知道如果我是通过pHp/HTML等严格执行此操作,我可能会使用类似会话变量的内容来允许更多页面访问变量.

或者是否有其他pHp函数将数据返回给我不知道的NSMutabalData?基本上这是我遇到麻烦的两者之间的联系,从pHp脚本返回数据 - 我真的不明白NSMutableData是什么'得到'.

我试图尽可能详细,对于长期的问题,我很抱歉.请假设这是我正在尝试做的所有事情,返回一个值.安全性并不重要(我试图在最简单的层面上做到这一点,然后在它上面构建它).我试图避免任何模糊的答案,比如"写一个网络服务"或"使用_ "来做这件事,我确信有很多更好的方法可以做到,但我不是急于推出一个程序 - 我只是想学习这个,以便更好地理解NSURLConnection,pHp,NSMUtableData以及齿轮如何组合在一起.如果我所问的在技术上是不可能的并且没有意义,我也很欣赏这个答案.我试过搜索,并没有找到一个令人满意的答案这个拼图.

提前致谢.

编辑:

我试过了

...
NSMutableData *receivedData = [[NSMutableData alloc] init];
receivedData = [[NSMutableData data] retain];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
label.text = receivedDataString; 
...
Run Code Online (Sandbox Code Playgroud)

哪个调用服务器上的pHp文件基本上是:

<?pHp
$result = "TRUE";
var_dump($result);
?>
Run Code Online (Sandbox Code Playgroud)

哪个不起作用.我认为我的问题是在pHp方面,是否有一些特殊命令将值返回给NSMutableData对象?(只是一些额外的信息,可能更多地澄清我的问题).

编辑二:

我似乎无法直接回应,可能是因为我以前只是匿名使用过该网站而且我有一个全新的帐户:)感谢您的回答Charles,我试图使用echo和var_dump,似乎都没有发送数据返回(转换为NSString时我的NSMutableData对象似乎是空的 - 除非我的目标C是错误的,但我已经把它解析到了最低限度,所以我不相信这种情况).

Fat*_*via 7

好的,我相信我得到了它的工作,所以我会发布一个答案,如果其他人正在寻找相同的.

服务器上的PHP文件如下:

<?php
echo 'Works';
?>
Run Code Online (Sandbox Code Playgroud)

我的h文件包含

#import <UIKit/UIKit.h>

@interface SampleViewController : UIViewController {
IBOutlet UIButton *theButton;
NSMutableData *receivedData;}
@property (nonatomic, retain) IBOutlet UIButton *theButton;
-(IBAction) clickTheButton:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)

我的m文件包含相关部分(其他一切只是Apple在SDK中创建时放入m文件的标准内容

-(IBAction) clickTheButton:(id)sender {
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"<path to my php file>try.php"]
                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                      timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    receivedData = [[NSMutableData data] retain];
    NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"This1: %@", receivedData);
    NSLog(@"This2: %@", receivedDataString);
} else {
    // Inform the user that the connection failed.
}
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
[receivedData setLength:0];
NSLog(@"This3: %@", receivedData);
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[receivedData appendData:data];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
NSLog(@"This4: %@", receivedDataString);
NSLog(@"This5: %@", receivedData);
}
Run Code Online (Sandbox Code Playgroud)

NSLogs输出如下:

这1:'<>'

This2:

这3:'<>'

这4:工作

这5:'<24726573 756c74>'

要回答我原来的问题,echo 'Works';PHP代码是将单词Works返回给NSMutableData对象.设置连接后,我需要调用该didRecieveData:方法将回显的信息实际放入数据文件中.