2011-09-27 63 views
1

我有在NSMutableArray裏與名searcharray,這等於陣列與NSTableView的是connected.And我寫了一個方法將項目添加到TableView中只是通過發送的NSMutableArray我的方法搜索行動。 問題是,搜索後,如果我刪除了我在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

好,剛纔幻舞電腦周圍的手鼓到目前爲止:) 但是,是,我玩過塊if和else,在應用程序運行時檢查所有變量,對我來說一切看起來都很完美。我不知道爲什麼它不工作,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