2017-07-14 5 views
0

ユーザーが写真をアップロードしてサーバーに送信できるようにするアプリを構築しています。しかし、私は、複数の写真をアップロードしようとすると、5枚の写真を言うと、2枚の画像をアップロードするだけで、5枚の画像をアップロードすることがあることに気付きました。アップロードのプロセスは一貫していないようですが、私はネットワークと関連があると思います。ここ は、アップロード用のコードです:Xcode - 写真をサーバーの問題にアップロードする

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSMutableDictionary * dict = [[NSMutableDictionary alloc]init]; 
dict = [returnString JSONValue]; 
[responseStr addObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
ImageIndex = ImageIndex+1; 
[self imageUplaodAndProductUploadFunction:ImageIndex]; 
} 

は、その後、私は回避するアイデアを思い付いた:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 

NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
NSMutableDictionary * dict = [[NSMutableDictionary alloc]init]; 
dict = [returnString JSONValue]; 
if([responseStr containsObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]]) 
{ 
    NSLog(@"It present"); 
    itcontains =YES; 
} 
else 
{ 
    itcontains = NO; 
    NSLog(@"Not contain"); 
    [responseStr addObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]]; 
} 

} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
if(itcontains == NO) 
{ 
    ImageIndex = ImageIndex+1; 
} 
[self imageUplaodAndProductUploadFunction:ImageIndex]; 
} 

、それは正しく5枚の写真をアップロードしますが、その後、奇妙な状況が起こります。 Image1、Image2、Image3、Image4、Image5の5つの画像があるとしましょう。 5枚の写真が正常にアップロードされましたが、画像が重複している可能性があります。 ケース1:画像1、画像2、画像2、画像4、画像4 ケース2: 、画像2、画像3、画像4、画像4

重複は、5つの画像のいずれでもかまいません。

誰でも手助けできますか?ありがとう

+0

これを試してみてください。https://stackoverflow.com/a/28737846/3901620 – KKRocks

+0

を私は仮定している(a)におこれらの要求を同時に実行しています。 (b)これらの同時リクエストのすべてに対してデリゲートとして機能する同じインスタンスを持っている。 (c)さまざまな同時リクエストが相互に重なり合う可能性があるイーバールを参照しています。さらに、非推奨のNSURLConnectionを使用しています。 'NSURLSession'を補完ブロックで使用すると、これらの問題の多くが解決されます。 – Rob

+0

ありがとうございました – Kevin

答えて

0

アドバイスをいただきありがとうございます。 はい、NSURLSessionを見て、コードを修正しました。 基本的には、以前の問題が解決したと思いますが、問題なく5枚の写真を正常にアップロードできます。

0

NSURLSessionUploadTaskを試してみてください

//背景のアップロードがファイルのみで動作します

NSString *fileName = [NSString stringWithFormat:@"%@%@", IMAGE_NAME_TO_BE_SAVED, @".png"]; 
NSString *signatureFile = [NSString stringWithFormat:@"%@/%@", NSTemporaryDirectory(), fileName]; 

NSData *imageData = UIImagePNGRepresentation(image); 
[imageData writeToFile:signatureFile atomically:YES]; 

while (![[NSFileManager defaultManager] fileExistsAtPath:signatureFile]) { 
    [NSThread sleepForTimeInterval:.5]; 
} 

NSURLSession *session = [self backgroundSession]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:uploadUrl]]; 
[request setHTTPMethod:@"POST"]; 
[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"]; 

NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:signatureFile]]; 

[uploadTask resume]; 
関連する問題