我正在開發一個使用API的iphone應用程序。
iOS/xcode:didReceiveData當在設備上運行時爲空,但在模擬器上罰款?
在'模擬器'它工作正常。在'設備'api調用所有運行但響應委託都返回空。
LOG:
1)didReceiveData
返回(空NSData
即< 20>)下面設備:
append data <20>
但這對於模擬器:
append data <dfgdf89fgd.....>
2)該didReceiveResponse
我有以下返回設備下面返回(設置NSLog監視NSURLConnection對象)。困惑,爲什麼這是不完整的:
1 connection <NSURLConnection: 0x147a30>
但這對於模擬器:
1 connection <NSURLConnection: 0x4b76ea0, http://api.site.com/search?id=111>
3)的connectionDidFinishLoading
低於爲模擬器
DONE. Received Bytes: 1400
但低於設備:
DONE. Received Bytes: 1
我的代碼:
我有一個API文件中下面的代碼:
- (void)fetch: (NSString *)id{
NSMutableData *receivedData = [[NSMutableData alloc]init];//initialised
self.receivedData = receivedData;//set to available globally
NSString *initialUrl = [NSString stringWithFormat: @"http://api.site.com/search?id=%@",id];
NSURL *url = [NSURL URLWithString:initialUrl];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"Token token=\"apitoken\"" forHTTPHeaderField:@"Authorization"];
[NSURLConnection connectionWithRequest:[request autorelease] delegate:self];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"1 connection %@",connection);
NSLog(@"didReceiveResponse");
[self.receivedData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
NSLog(@"2 connection %@",connection);
NSLog(@"append data %@",data);
[self.receivedData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
//TODO error handling for connection
NSLog(@"Cannot Connect");
if ([_delegate respondsToSelector:@selector(apiFailed:)]) {
[_delegate apiFailed:[error localizedDescription]];
}
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"DONE. Received Bytes: %d", [self.receivedData length]);
NSLog(@"FULL DATA: %@",self.receivedData);
}
的模擬器和設備(我的iphone與provi sioned個人資料和工作)都運行在同一個Wifi(我的家庭路由器)。
的API:
的API返回JSON少量和我有一組不同的JSON和器件和模擬器返回完整JSON沒有問題的測試,我只是不能讓它工作與這個API。
我甚至在不同位置有相同的JSON(api返回),我可以做相同的請求(帶有頭文件和身份驗證),它對設備沒有任何問題。奇怪的是,雖然連接對象仍然不適合僞造的api服務器。在設備didReceiveResponse
有1 connection <NSURLConnection: 0x1af600>
仍然並沒有與連接url(但運行在模擬器它有1 connection <NSURLConnection: 0x8193fd0, http://test-server.com:81/api-data.json>
)。這表明其設備和模擬器NSURLCONNECTION
對象之間的正常差異。
我覺得這可能是認證的方式獲得,但API是完全開放的(假設你有令牌)並用模擬器加didFailWithError
是跑不了的工作沒有問題..
我已經宣佈委託方法在頭文件裏面。
不知道爲什麼連接對象和數據對象都會有問題。
備選:
我嘗試下面的方法獲取,而不是什麼我已經內,但它也適用於模擬器但同樣的事情發生在設備。
//NSURLCONN and NSDATA in response still return empty???
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL
URLWithString:@"http://api.site.com/search?id=111"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
[request setHTTPMethod:@"GET"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"Token token=\"mytoken\"" forHTTPHeaderField:@"Authorization"];
NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
我會很感激任何想法。
感謝
(3)在Firefox RESTCLIENT上完成並沒有問題。沒有https(5)。標題是相同的,並且可以在模擬器(4)中正常工作。現在嘗試(2)。最好怎麼做(1)? – 2013-04-21 16:19:53
@CraigTaub for 1 - 設置請求緩存策略爲NSURLRequestReloadIgnoringLocalAndRemoteCacheData – 0x8badf00d 2013-04-21 16:22:40
謝謝...好主意檢查狀態碼,它返回的'401(非授權)',這對於模擬器來說是非常奇怪的......(6)已經檢查過,是的,它的正確和(7)同樣的事情。 – 2013-04-21 16:23:41