こんにちは私は、NSURLConnectionデリゲートメソッドを使用してサーバー上のデバイスに格納されているリストを取得しようとしています。iOS 5:pListの非同期rettrieval - 受信したデータは常に0バイトです
Jeff LaMarcheのiOS 3の本でチュートリアルを見ていて、基本的にはこれらの方法を実装しようとしています。
これらは、実装方法
あるしかし、私はいつも入れません:「0バイトのデータを受信した」私はそれを理解しない:
#pragma -NSURLCOnnection Delegate Methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
[receivedData setLength:0];
}
//==============================================================================
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[receivedData appendData:data];
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
if(!self.receivedData)
{
NSLog(@"Received Data was nil");
}
}
//==============================================================================
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
UIAlertView *alert1 = [[UIAlertView alloc]
initWithTitle:@"Error"
message:[NSString stringWithFormat:@" Connection Failed! Error: %@ ,(URL:%@)", [error localizedDescription] ,[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert1 show];
NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
NSLog(@"Succeeded! Received %d bytes of data",[self.receivedData length]);
//Now take the data and convert it into a propertylist
NSData *plistData = self.receivedData;
NSPropertyListFormat format;
NSString *error;
id pList = [NSPropertyListSerialization propertyListFromData:plistData
mutabilityOption:NSPropertyListImmutable
format:&format
errorDescription:&error];
if(!pList)
{
NSLog(@"There was an error converting data received into a propertyList");
NSLog(error);
}
self.receivedData = nil;
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
}
-(void)retrieveFileFromServerAsynchronously
{
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
if(![self getURLToGetFileFrom])
{
UIAlertView *alert1 = [[UIAlertView alloc]
initWithTitle:@"Error"
message:@"InvalidPath"
delegate:self cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert1 show];
}
if(![self getFileName])
{
UIAlertView *alert2 = [[UIAlertView alloc]
initWithTitle:@"Error"
message:@"Invalid FileName"
delegate:self cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert2 show];
}
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
NSMutableString *urlString = [[NSMutableString alloc] initWithString:[self getURLToGetFileFrom]];
[urlString appendString:[self getFileName]];
NSLog((@"Fetching file from URL %@", urlString));
NSURLRequest *req = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.00 ];
NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if(con)
{
NSMutableData *data = [[NSMutableData alloc] init ];
self.receivedData = data;
if(!self.receivedData)
NSLog(@"Received Data was nil");
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
}
else
{
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Error"
message:@"Couldn't connect to remote server"
delegate:self cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
}
}
イムコンソールに上記の出力を得ます。誰かが私にこれを修正し始めるべきなんて考えてもらえますか? 215
fileFetcher.m - [fileFetcher接続:didReceiveResponse:] 183
fileFetcher.m - : - [fileFetcher接続:didReceiveData] [fileFetcher connectionDidFinishLoading]データがnil
fileFetcher.mた受信190
成功しました! 236
どうもありがとう:[fileFetcher connectionDidFinishLoading] - のpropertylistに受信したデータを変換中にエラーが発生しましたデータ
の0バイトを受信
ストリームは、あまりにも数バイト
fileFetcher.mを持っていました。
receivedDataは弱いですか? –
はい、それは弱かったです。そうした問題を抱えていたホーリー****。うわー、その奇妙な、私はこのものをデバッグして約1日を過ごした!! iOS 5のこれらの変更は、私をナッツに追いやっています! ありがとうございます。私の質問に「答える」ことができるので、あなたの答えを受け入れることができます。 – banditKing
これがなぜ起こるのかについてもう少し詳しく説明した回答を追加しました。 –