2011-09-27 3 views
1

NSTableView가 연결된 배열과 동일한 searcharray라는 이름으로 NSMutableArray를 검색하기위한 작업이 있습니다. NSMutableArray를 내 메서드로 보내어 TableView에 항목을 추가하는 메서드를 작성했습니다. 문제는 SearchField 및 SearchField에 입력 한 내용을 삭제했는지 검색 한 후 컴파일러가 비어있는 것과 TableView가 비어 있다고 느끼지 않는다는 것입니다. 그러나 내 코드로 인해 searcharray의 데이터가 있어야합니다. 내 코드는 다음과 같습니다.NSTableview 및 SearchField

#import "myTableViewAppDelegate.h" 

@implementation myTableViewAppDelegate 

@synthesize window; 
@synthesize searcharray; 


-(void)addItems:(NSMutableArray *)ar{ 
    array = ar; 
    [array retain]; 
    [tableView reloadData]; 
} 
- (int)numberOfRowsInTableView:(NSTableView *)tableView{ 
    return (int)[array count]; 
} 
- (id)tableView:(NSTableView *)tableView 
objectValueForTableColumn:(NSTableColumn *)tableColumn 
      row:(int)row 
{ 
    return [array objectAtIndex:row]; 
} 



- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Insert code here to initialize your application 
    NSMutableArray *animals = [[NSMutableArray arrayWithObjects:@"Cat", @"Dog", @"Fish", @"Squirrel", @"Bear", @"Turtle", nil] retain]; 
    NSLog(@"%@",animals); 
    searcharray = animals; 
    [self addItems:animals]; 

} 

- (IBAction)search:(id)sender { 
    //NSLog(@"%@",searcharray); 
    NSString *filter = [[NSString alloc] initWithString:[search stringValue]]; 
    NSMutableArray *result = [[NSMutableArray alloc] init]; 
    if (filter != nil) { 
     for (NSString *item in searcharray) { 
     if ([item rangeOfString:[search stringValue]].location !=NSNotFound) { 
      NSLog(@"Item %@ contains %@",item,[search stringValue]); 
      [result addObject:item]; 
     } 
    } 
    } 
    else{ 
    result = searcharray; 
    } 
    NSLog(@"%@",result); 
    [self addItems:result]; 
    [result release]; 
    [filter release]; 
} 
@end 
+0

음, 지금까지 컴퓨터 주변 탬버린 : 하지만, 그냥 마술 춤 그래 충분히 .... 아니 었 확인하지 않습니다 , 나는 블록을 가지고 놀았다. else는 app이 실행 중일 때 모든 변수를 검사했고, 모든 것이 완전히 나에게 잘 보였다. 나는 그것이 왜 작동하지 않는 이유와 tableview가 비어 있다는 것을 모른다. ( –

+0

나는 C에서 비슷한 루틴을 사용하고 거기에서 일했다. 나는 Objective-C에 익숙하지 않았기 때문에, 아마도 내가 모르는 것들이있을 것이다. –

답변

0

고쳐졌습니다.

if (filter != nil || filter.length != 0) 

나는 이유를 알고 있지만, 단지 NULL 동일 변수가

+0

'[[NSString alloc] initWithString : [search stringValue]]''는 메모리를 할당 할 수 없다면 nil 만 반환합니다. 테스트를 if ([filter length])로 변경할 수 있습니다. nil 객체는 항상 0을 반환하므로'filter'가 nil이거나'length'가 0이면 false가됩니다. – SSteve