2014-09-02 2 views
0

정보를 서버로 보낼 수있는 앱이 있습니다. 이 정보는 클라이언트가 앱을 사용하는 동안 낮에 겹쳐 쌓여 있으며 원하는 때에 '업데이트'버튼을 눌러 서버의 모든 것을 보낼 수 있습니다. ios 프로세스를 느리게하는 방법

이 항상 그가 최근 흐름 증가했다 때까지 잘 작동하고 분명히 이상 100

10 개체를 업데이트 갔다 업데이트 시간이 더 걸리는 문제 taht를 아니에요.

문제는, 어떤 시점에서, 내가 frenchophobes를 들어

Error: Error Domain=NSURLErrorDomain Code=-1001 "La requête a expiré." 
UserInfo=0x189874b0 {NSErrorFailingURLStringKey=http://www.*********.be/upload, 
NSErrorFailingURLKey=http://www.************.be/upload, 
NSLocalizedDescription=La requête a expiré., 
NSUnderlyingError=0x189abd70 "La requête a expiré."} 

을 얻고있다 "요청이 만료는"*** 내가 돌아올, 내가 함께 URL을 숨긴 것입니다 *, 당신이주의했다.

지금 로컬에서 시도했지만 작은 업데이트를해도 문제가 없지만 150 번 업데이트 (150 번 같은 것을 보내면), 어떤 점에서는 위의 오류가 X 번 발생합니다. . 이 오류는 모든 마지막 항목에서 발생하지는 않습니다. 가운데 20 개 또는 30 개가 될 수 있습니다.

변경할 수있는 방법이 있습니까?

다음은 문제와 관련이 있어야하는 코드입니다.

// Set the max number of concurrent operations (threads) 
    //[operationQueue setMaxConcurrentOperationCount:3]; // Todo: try increasing max thread count 
    [operationQueue setMaxConcurrentOperationCount:NSOperationQueueDefaultMaxConcurrentOperationCount]; //dynamic thread count 
    self.queueCount = persons.count; 
    self.currentQueue = 1; 

    for (Person *person in persons) { 
     for (int i = 0 ; i<130 ; i++){ //this is where i try to break the app 
     [self createSendPersonOperation:person]; 
     }} 

지금 무엇을 아마 일하는 것이하는 과정마다 20여 회 발생을 늦출 것 "일"의 마지막 줄을 넣어, 그래서 서버 또는 응용 프로그램은 미쳐하지 않습니다.

이것이 가능합니까? 그렇다면 어떻게?

참고 : 저는 노인 코드에 들어가려고 애쓰는 중학교 졸업생입니다. 그 사람은 사용할 수 없으므로 내가 할 수있는 모든 도움을받을 수 있습니다.

편집 : 또한 내 오류가 서버 측 문제에서 발생했다고 보십니까? 아니면 앱 양면 문제입니까?

편집 : HTTP 요청을 완료하십시오. 앱에 저장되는 모든 사용자에 대해 사용자가 업데이트하기로 결정하면 배열 된 모든 사람에 대해 업데이트가 수행됩니다.

- (void)createSendPersonOperation:(Person *)person 
{ 
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/json", nil]; 

    NSDictionary *params = @{ 
     @"email": person.email, 
     @"gender": person.gender, 
     @"language": person.language, 
     @"hasFacebook": person.hasFacebook, 
     @"sendPostalCard": person.sendPostalCard 
    }; 

    NSLog(@"params: %@", params); 

    [manager POST:kURLUpdate parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     // Add picture to the form 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 

     NSString *pictureFilePath = [documentsDirectory stringByAppendingPathComponent:person.picture]; 
     NSURL *pictureURL = [NSURL fileURLWithPath:pictureFilePath]; 

     [formData appendPartWithFileURL:pictureURL name:@"picture" error:nil]; 
    } success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"Success: %@", responseObject); 

     if ([responseObject isKindOfClass:[NSDictionary class]]) { 
      if ([responseObject objectForKey:@"error"]) { 
       NSLog(@"Error 1"); 
       NSDictionary *error = [responseObject objectForKey:@"error"]; 
       NSLog(@"Error message: %@", [error objectForKey:@"message"]); 
      } else { 
       // Set Person's sended attribute 
       person.sended = @YES; 

       [Person saveObject:[[PersistentStack sharedInstance] managedObjectContext] error:nil]; 
      } 
     } else { 
      NSLog(@"Error 2"); 
     } 

     [self decreaseQueueCount]; 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
     NSLog(@"Parameter that failed : %@", [params objectForKey:@"email"]); 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Erreur" 
                  message:[error localizedDescription] 
                  delegate:nil 
                cancelButtonTitle:@"Fermer" 
                otherButtonTitles:nil]; 
     [alertView show]; 

     self.updateHud.mode = MBProgressHUDModeText; 
     self.updateHud.labelText = AMLocalizedString(@"update.failure.message", @""); 

     [self.updateHud hide:YES afterDelay:3]; 
    }]; 
} 
+0

은 별도의 http 요청입니까? 내 초기 추측은 당신이 서버를 넘칠 수 있고 그것을 처리 할 수 ​​없다는 것이지만 당신은 정말로 그런 일을하고 싶지 않습니다. – timpone

+0

내 질문이 업데이트되었습니다. 메서드가 X 번 실행되기 때문에 별도의 HTTP 요청이어야합니다. –

답변

0

정말 문제의 원인을 모르지만, 앱 둔화 생각한다면 적어도 도움 당신은 당신이 이런 식으로 뭔가 함께 할 수있는 문제를 이해하는 것입니다 :

NSDate *loopUntil = [NSDate dateWithTimeIntervalSinceNow:15]; 
while ([loopUntil timeIntervalSinceNow] > 0) { 
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode 
          beforeDate:loopUntil]; 
} 

계속하기 전에 15 초 동안 기다려야하므로 제안한대로 20 ~ 30 회 요청 후에이 메시지를 넣을 수 있습니다.

정말 내 요청을 분류하거나 그와 비슷한 것을 고려해야한다고 생각합니다. 그렇다면 서버에 과부하가 걸리지 않을 것입니다 (실제로 문제가있는 경우).

관련 문제