0

블록 (iOS 7)에 있다고 판단되는 잡히지 않는 오류가 발생합니다. 그러나 NSException은 디버그 로그에만 나타나기 때문에 원인을 알기가 어렵습니다. 여기 dispatch_async에서 알려지지 않은 예외가 발생했습니다.

내 코드입니다 :

-(void)insertIntoArray:(NSArray *)array 
{ 
@try { 
    if([array count] > 0){ 
     NSArray *anArray = [array copy]; 
     dispatch_queue_t q = dispatch_queue_create("getCustomerList", NULL); 
     dispatch_async(q, ^(void){ 
      for (NSDictionary *dict in anArray){ 
       Customer *customer = [[Customer alloc]init]; 
       NSInteger i = [[dict objectForKey:@"CustomerID"] integerValue]; 
       customer.ID = i; 
       customer.AppointmentID = [dict objectForKey:@"AppointmentID"]; 
       customer.UID = [dict objectForKey:@"UID"]; 
       customer.AccountNumber = [dict objectForKey:@"AccountNumber"]; 
       customer.Birthdate = [dict objectForKey:@"Birthdate"]; 
       customer.Gender = [dict objectForKey:@"Gender"]; 
       customer.FirstName = [dict objectForKey:@"Firstname"]; 
       customer.MiddleName = [dict objectForKey:@"MiddleName"]; 
       customer.LastName = [dict objectForKey:@"LastName"]; 
       customer.Address = [dict objectForKey:@"address1"]; 
       customer.PhoneNumber = [dict objectForKey:@"PhoneNumber"]; 
       customer.PictureName = [dict objectForKey:@"PictureName"]; 
       customer.LastVisit= [dict objectForKey:@"LastVisit"]; 
       customer.AccountOpened = [dict objectForKey:@"AccountOpened"]; 
       customer.PhoneNumber2 = [dict objectForKey:@"HPNum"]; 
       customer.DisplayName = [dict objectForKey:@"DisplayName"]; 
       customer.ProfileImage = [dict objectForKey:@"ProfileImage"]; 
       customer.EmailAddress = [dict objectForKey:@"EmailAddress"]; 
       customer.Allergy = [dict objectForKey:@"Allergy"]; 

       char index = [[dict objectForKey:@"DisplayName"] characterAtIndex:0]; 
       NSString *uniChar = [NSString stringWithFormat:@"%c",index]; 
       if(![self.arrayOfIndices containsObject:uniChar]){ 
        [self.arrayOfIndices addObject:uniChar]; 
       } 
       [self.arrayOfCustomer addObject:customer]; 
      } 

      self.segmentedControl.userInteractionEnabled = YES; 
      [self.indicator stopAnimating]; 
      [self.indicator removeFromSuperview]; 
      [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; 
      self.isRefreshing = NO; 
      [self.tableView setUserInteractionEnabled:YES]; 
      self.tableView.scrollEnabled = YES; 
      self.navigationItem.rightBarButtonItem.enabled = true; 
      [self.refreshControl endRefreshing]; 
      [self.tableView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 


     }); 
    } 
    else { 
     [self.indicator stopAnimating]; 
     [self.indicator removeFromSuperview]; 
     self.isRefreshing = NO; 
     [self.tableView setUserInteractionEnabled:YES]; 
     self.tableView.scrollEnabled = YES; 
     self.navigationItem.rightBarButtonItem.enabled = true; 
     [self.refreshControl endRefreshing]; 

    } 
} 
@catch (NSException *exception) { 
    NSLog(@"Error %@",exception); 
    [self alertStatus:[NSString stringWithFormat:@"An unexpected error has occured. Exception %@", exception.reason] :@"Error!"]; 
} 
self.navigationItem.rightBarButtonItem.enabled = true; 

}

그리고 여기 NSException 로그에 보이는, 날 수있는 방법

내 질문은이

enter image description here 무엇 블록에서 예외 이유 또는 설명을 얻으시겠습니까? 그렇지 않은 경우 오류가 발생하는 코드에 문제가 있습니까?

누구든지 도움이된다면 기쁠 것입니다. 건배!

+0

는 스택 추적을 표시합니다. – trojanfoe

+0

모든 Objective-C 예외에 대한 중단 점을 만드는 것이 좋습니다. – newacct

답변

0

그래, GCD에 대해 조금 읽었고이 솔루션을 생각해 냈습니다. 나는 그것이 올바른 방법인지 아닌지 tho를 모른다. 하지만 지금은 효과가 있습니다.

-(void)insertIntoCustomerArray:(NSArray *)array 
{ 
@try { 
    [self.arrayOfCustomers removeAllObjects]; 
    if([array count] > 0) { 

     __block LoginViewController *blockSelf = self; 
     dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(concurrentQueue, ^{ 
      __block NSArray *blockArray = [array copy]; 

      dispatch_sync(concurrentQueue, ^{ 
       for (NSDictionary *dict in blockArray){ 
        Customer *customer = [[Customer alloc]init]; 
        NSInteger i = [[dict objectForKey:@"CustomerID"] integerValue]; 
        customer.ID = i; 
        customer.AppointmentID = [dict objectForKey:@"AppointmentID"]; 
        customer.UID = [dict objectForKey:@"UID"]; 
        customer.AccountNumber = [dict objectForKey:@"AccountNumber"]; 
        customer.Birthdate = [dict objectForKey:@"Birthdate"]; 
        customer.Gender = [dict objectForKey:@"Gender"]; 
        customer.FirstName = [dict objectForKey:@"Firstname"]; 
        customer.MiddleName = [dict objectForKey:@"MiddleName"]; 
        customer.LastName = [dict objectForKey:@"LastName"]; 
        customer.Address = [dict objectForKey:@"address1"]; 
        customer.PhoneNumber = [dict objectForKey:@"PhoneNumber"]; 
        customer.PictureName = [dict objectForKey:@"PictureName"]; 
        customer.LastVisit= [dict objectForKey:@"LastVisit"]; 
        customer.AccountOpened = [dict objectForKey:@"AccountOpened"]; 
        customer.PhoneNumber2 = [dict objectForKey:@"HPNum"]; 
        customer.DisplayName = [dict objectForKey:@"DisplayName"]; 
        customer.ProfileImage = [dict objectForKey:@"ProfileImage"]; 
        customer.EmailAddress = [dict objectForKey:@"EmailAddress"]; 
        customer.Allergy = [dict objectForKey:@"Allergy"]; 

        char index = [[dict objectForKey:@"DisplayName"] characterAtIndex:0]; 
        NSString *uniChar = [NSString stringWithFormat:@"%c",index]; 
        if(![blockSelf.arrayOfIndices containsObject:uniChar]){ 
         [blockSelf.arrayOfIndices addObject:uniChar]; 
        } 
        [blockSelf.arrayOfCustomers addObject:customer]; 

       } 

      }); 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       [self removeIndicatorView]; 
      }); 
     }); 
    } 
    else { 

    } 
} 
@catch (NSException *exception) { 
    NSLog(@"Error %@", exception.reason); 
    [self alertStatus:[NSString stringWithFormat:@"Error while fetching the customer list. Exception %@", exception] :@"Error!"]; 
} 

}

관련 문제