2012-09-02 2 views
0

좋아, 나는 객관적인 C에 상당히 익숙하다. 웹 서버에서 이미지 목록을 다운로드하고 슬쩍 제스처를 사용하여 UIImage보기에 적절한 것들을 표시하는 앱이있다. 다음/이전 사진이 표시되도록 앞으로 또는 뒤로 이동하십시오. 사진에 대한 현재의 이름 형식은 다음과 같이이다 : 이미지 다운로드, UIImageView 및 SORT에 표시하기

uploaded_141_admin1.png 
uploaded_141_admin2.png 
uploaded_141_interior1.png 
uploaded_141_interior2.png 
uploaded_141_exterior1.png 

현재 코드로드

(또는 사용자가에에 ... (141)는 가변 무엇이든 기록 파일 이름의 중간 부분 (141)이보기에 모든 그림 이 예에서는 형식의 예를 보려면 여기에 표시). 문제는, 어떤 운문이나 이유가 없다는 것입니다. 알파벳 순서로 파일 이름의 마지막 부분을 사용하거나 (또는 ​​전체 파일 이름을 사용하여 동일한 결과를 얻을 수 있기를 바랍니다.). 내가 검색 한 나는 내가 사용하고 어쩌면 때문에 (무엇을 찾고 찾을 수 없습니다

uploaded_141_admin1.png 
uploaded_141_admin2.png 
uploaded_141_exterior1.png 
uploaded_141_interior1.png 
uploaded_141_interior2.png 

다음 uiimageiew을 통해 보내 주시면 때 위의 예에서는 다음과 같은 순서로 다운로드 한 사진을 표시 할 것 잘못된 검색 기준). 다음은 UIImageView에서 이미지를 다운로드하고 표시하는 기존 코드입니다. 나는 "종류"코드가 여기에 어디 갈 것입니다 가정 : 당신이 다운로드 작업을 시작하기 전에 downloadPictures: 방법에서

-(void)downloadPictures:(NSArray *)picPaths { 
    ELog(@"Downloading pictures: %@",picPaths); 
    // wait indicator 
    [[WaitingView sharedInstance] setMessage:LocStr(@"Loading pictures... The more pictures there are, the longer this will take. Please be patient.")]; 
    [[WaitingView sharedInstance] showIndicator:YES]; 
    [[WaitingView sharedInstance] displayOn:[self view]]; 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
    // queue download operation 
    NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
    NSInvocationOperation *downloadOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadOperation:) object:picPaths]; 
    [queue addOperation:downloadOp]; 
} 

-(void)downloadOperation:(NSArray *)picPaths { 
    NSMutableArray *allPictures = [[NSMutableArray alloc] init]; 
    for(NSString *path in picPaths) { 
     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@%@/%@/%@",SERVER_ADDRESS,SERVER_PORT,SERVER_PHOTOS,path]]; 
     NSData *picData = [NSData dataWithContentsOfURL:url]; 
     if(picData!=nil) { 
      UIImage *img = [UIImage imageWithData:picData]; 
      if(img!=nil) { 
       [allPictures addObject:img];  
      } else { 
       ELog(@"Failed to convert data to image from url %@",url); 
      } 
     } else { 
      ELog(@"Failed to download image from url %@",url); 
     } 
    } 
    [[WaitingView sharedInstance] performSelectorOnMainThread:@selector(remove) withObject:nil waitUntilDone:NO]; 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
    self.pictures=allPictures; 
    if([self.pictures count]==0) { 
     [self performSelectorOnMainThread:@selector(downloadErrorMessage) withObject:nil waitUntilDone:NO]; 
    } else { 
     self.currentIndex=0; 
     [self performSelectorOnMainThread:@selector(showPicture) withObject:nil waitUntilDone:NO]; 
    } 
} 

-(void)downloadErrorMessage { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oooops!" message:LocStr(@"Pictures download failed") delegate:nil cancelButtonTitle:LocStr(@"Close") otherButtonTitles:nil]; 
    [alert show]; 
    [alert release];  
    [self goBack]; 
} 

-(void)showPicture { 
    UIImage *image = [self.pictures objectAtIndex:self.currentIndex]; 
    ELog(@"Now displaying image with index %d: %@",self.currentIndex,image); 
    self.picture.image=image; 
    [self.picture setNeedsLayout]; 
} 

답변

1

당신이 이미지를 원하는 순서로 당신의 picPaths 배열을 정렬한다. NSArray 메서드 sortedArrayUsingSelector:을 사용하여 새 정렬 된 배열을 만들어이 작업을 수행 할 수 있습니다. 정렬을위한 선택자로 caseInsensitiveCompare:을 사용하면 알파벳 순으로 배열의 NSString을 정렬합니다.

NSArray *sortedPicPaths = [picPaths sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

그런 다음 NSInvocationOperation을 초기화 할 때 정렬 된 배열을 개체로 전달하십시오.

+0

완벽하게 작동했습니다! 고맙습니다! – user1642188

관련 문제