我在PHP中有一个脚本,可以抓取服务器上的图像。我希望它能够将其发送到Objective-C。我尝试了许多返回图像的方法,但似乎都不起作用。我将图像存储在服务器上的目录中,我希望能够将其发送到我的应用程序。这是我当前的代码:
代码只是不会更改图像。我不确定如何检查 PHP 是否正确发送图像。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myserverurl"]];
[request setHTTPMethod:@"POST"];
NSString *body = @"username=benr783&password=testpassword";
[request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connect start];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
self.image.image = [UIImage imageWithData:data];
}
几个观察结果:
-
您似乎假设只需调用一次
didReceiveData
方法即可接收整个图像。这不是一个有效的假设。(事实上,除非你的图像很小,否则这实际上不太可能。在开始连接之前,实例化一个
NSMutableData
对象,在didReceiveData
中,您只需将接收到的数据附加到该NSMutableData
,然后在connectionDidFinishLoading
中,一旦您将多次调用中收到的所有数据合并到didReceiveData
到单个NSMutableData
中,您现在可以采用最后的NSMutableData
并尝试将其转换为UIImage
。 -
顺便说一句,仅当您使用带有
startImmediately
选项的initWithRequest
格式副本并将该选项设置为NO
(仅在特殊情况下使用)时,才调用start
。在这种情况下,只需删除该start
调用即可。 -
您应该检查接收到的数据是否真的是图像。例如,在
didReceiveResponse
中,确保NSURLResponse
的statusCode
为 200。确保未调用didFailWithError
。等。- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { if ([response isKindOfClass:[NSHTTPURLResponse class]]) { int statusCode = [(NSHTTPURLResponse *)response statusCode]; if (statusCode != 200) { NSLog(@"statusCode != 200; it is %ld", (long)statusCode); } } }
-
您可能希望使用 Charles 观看此交易的发生,并确保它是响应中的图像,等等。