2011-07-02 3 views
1

내가 운이있는 테이블보기의 배열을 정렬하기 위해 노력하고있어, 이것은 내가 할 노력하고있어 방법은 다음과 같습니다NSMutableArray 배열 정렬 방법?

- (void) compare 
    { 

     NSMutableArray *temp = [[NSMutableArray alloc] initWithObjects: nil]; 

     [temp addObjectsFromArray:[self displayedObjects]]; 


     int a = [[self displayedObjects] count]; 

     for (int i = 0; i < (a - 1); i++){ 

      for (int j = 0; j <= (i^2); j++) { 

       NSString *temp1 = [temp objectAtIndex:i]; 

       NSString *temp2 = [temp objectAtIndex:i+1]; 

       if (temp1 > temp2) { 

        [movieIndex replaceObjectAtIndex:i withObject:temp2]; 

        [movieIndex replaceObjectAtIndex:i+1 withObject:temp1]; 

       } 
      } 
     } 

     [self movieIndex]; 

     [[self tableView] reloadData]; 

    } 

displayedObjects는 사용자가 새로운 객체를 추가 할 수 있습니다 배열의 배열입니다. 이 객체는 다음 형식의 영화 인스턴스입니다.

tableview 셀의 제목은 영화입니다. 그 제목의 "in"에는 영화에 대한 세부 사항이있는 테이블 뷰가 있습니다. 내가하고 싶은 일은 표시된 영화 제목을 오름차순으로 정렬하는 것이지만 코드가 작동하지 않는 것 같습니다.


displayedObjects은 3 개의 NSString과 1 개의 NSNumber로 구성됩니다. 이 객체가 다음 클래스 형성 가져옵니다 아무도 아직 제안되지 않았기 때문에

#import <Foundation/Foundation.h> 

@interface Movie : NSObject 
    { 
     NSString *_title; 
     NSString *_gender; 
     NSString *_location; 
     NSNumber *_publicationYear; 
    } 

@property (nonatomic, retain) NSString *location; 
@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *gender; 
@property (nonatomic, retain) NSNumber *publicationYear; 

+ (id)movieWithTitle:(NSString *)title 
       gender:(NSString *)gender 
        year:(NSUInteger)year 
       location:(NSString *)location; 

- (id)initWithTitle:(NSString *)title 
       gender:(NSString *)gender 
        year:(NSUInteger)year 
       location:(NSString *)location; 

@end 

답변

0

을, 나는 개인적으로 블록을 사랑, 난 이미 제안 같은 일에 블록 대안 제시합니다 :

[myArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    ... 
}]; 
+0

: 나는 그것을 사용하여 작동했다 * name1 = obj1; NSString * name2 = obj2; return [name1 localizedCaseInsensitiveCompare : name2]; } ]; 하지만 알 수없는 예외 'NSInvalidArgumentException'이유로 응용 프로그램을 종료하는 sigbart 오류가 발생합니다 : '- [Movie localizedCaseInsensitiveCompare :] : 인스턴스 0x5912da0에 전송 된 인식 할 수없는 선택기 "" – Morpheas1983

+0

내 제안과 관련이 없습니다 ... "..."의 단지 당신의 구현. – Steve

0

을^NSComparisonResult (아이디으로 obj1, 아이디 obj2보다) { 있는 NSString : 나는 또한 당신의 접근 방식 [movieIndex sortUsingComparator을 시도

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; 

[movieIndex sortUsingDescriptors:[NSArray arrayWithObject:titleSorter]];