1

好的,我很难找到不仅仅是使用 JSON 或 ASIHTTPRequest 的答案。但我想我的问题更具体一点。我只是将编程作为一种爱好,所以我不是专家。话虽如此,我对此的抽象理解可能完全不符合实际,所以这个问题可能无法回答。

基本上,我想做的是向 Web 服务器上的 pHp 脚本发送 HTTP 请求,让 Web 服务器返回一个值,比如说一个简单的整数值或布尔值(想想一个返回是/否的登录脚本)。在这一点上,我并不担心安全性,因为我正在努力让自己理解这一点。

根据我收集到的信息,我会使用一些东西来达到以下效果

// 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.
}  

这是来自 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

另外,假设我可以做到所有这些。我的问题变成了,如何将 pHp 中的值返回给 iOS 'NSMutableData' 变量。我会“回应”它吗?例如:

echo "$result";

然后这就是放入 NSMutableData 的信息(变量 $result)?我知道如果我是通过 pHp/HTML 等严格执行的,我可能会使用会话变量之类的东西来允许更多页面访问该变量。

还是有其他一些我不知道的将数据返回到 NSMutabalData 的 pHp 函数?基本上这是我遇到问题的两者之间的联系,即从 pHp 脚本返回数据 - 我真的不明白 NSMutableData 正在“得到”什么。

我试图尽可能详细,很抱歉这个问题很长。请假设这就是我想要做的,返回一个值。安全性并不重要(我试图在最简单的层面上做到这一点以理解它然后在其上构建)。我试图避免任何模糊的答案,例如“编写 Web 服务”或“使用_ ”来完成它,我确信有很多更好的方法可以做到这一点,但我不会急于推出一个程序- 我只是想学习这个,以便更好地理解 NSURLConnection、pHp、NSMUtableData 以及这些齿轮如何组合在一起。如果我的要求在技术上是不可能的并且没有意义,我也很欣赏这个答案。我已经尝试过搜索,但还没有为这块拼图找到令人满意的答案。

提前致谢。

编辑:

我试过了

...
NSMutableData *receivedData = [[NSMutableData alloc] init];
receivedData = [[NSMutableData data] retain];
NSString *receivedDataString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
label.text = receivedDataString; 
...

它在服务器上调用一个 pHp 文件,基本上是:

<?pHp
$result = "TRUE";
var_dump($result);
?>

这是行不通的。我认为我的问题出在 pHp 方面,是否有一些特殊的命令可以将值返回给 NSMutableData 对象?(只是一些额外的信息可能会更多地澄清我的问题)。

编辑二:

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

4

2 回答 2

7

好的,我相信我已经让它工作了,所以如果其他人也在寻找相同的答案,我将发布一个答案。

服务器上的PHP文件如下:

<?php
echo 'Works';
?>

我的 h 文件包含

#import <UIKit/UIKit.h>

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

我的 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);
}

NSLogs 输出如下:

这1:'<>'

这2:

这3:'<>'

这4:作品

这5:'<24726573 756c74>'

要回答我最初的问题,echo 'Works';是 PHP 代码将 Works 一词返回给 NSMutableData 对象。建立连接后,我需要调用该didRecieveData:方法将回显的信息实际放入数据文件中。

于 2011-03-22T17:57:00.373 回答
1

基本上这是我遇到问题的两者之间的联系,即从 pHp 脚本返回数据 - 我真的不明白 NSMutableData 正在“获取”什么。

如果它像其他看起来只是发出 HTTP 请求的东西一样工作,您将获得一个包含来自所请求 URL 的输出的字符串,或者您将获得一个可以从中获得该输出的对象(包括标头等) . 我对 Objective C 或 iOS 一无所知,但我敢打赌,你只会得到脚本的输出。

换句话说,

如何将 pHp 中的值返回给 iOS 'NSMutableData' 变量。我会“回应”它吗?

大概!

你为什么不试试代码,看看你得到了什么?如果它成功了,那么恭喜你:你已经创建了你的第一个 Web 服务。

于 2011-03-22T16:32:02.423 回答