2010-06-30 37 views
0

這裏是我的生成數據爲什麼tableview不顯示綁定數據?

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // Insert code here to initialize your application 
    [array initWithCapacity:20]; 
} 

- (IBAction) readlog:(id)sender { 
    for (int i = 0; i < 20; i++) {  
     NSDictionary *d = [NSDictionary dictionaryWithContentsOfFile:[path stringByAppendingFormat:@"/%d.log",i]]; 
     [array addObject:d]; 
    } 

} 

- (IBAction) writelog:(id)sender { 
    for (int i = 0; i < 20; i++) { 
     NSMutableDictionary *d = [NSMutableDictionary dictionary]; 
     NSString *name = [NSString stringWithFormat:@"testfile%d", i]; 
     [d setObject:[NSDate date] forKey:@"date"]; 
     [d setObject:[path stringByAppendingFormat:@"/%d.log", i] forKey:@"path"]; 
     [d setObject:name forKey:@"name"]; 
     [d writeToFile:[path stringByAppendingFormat:@"/%d.log", i] atomically:YES]; 
    } 

的代碼,我結合我的tableview柱用的keyPath名稱/路徑/日期 appdelegate.array但它不會在數組中顯示任何數據..有什麼錯這裏? 謝謝!

回答

1

您還沒有創建數組。

init方法,包括NSMutableArray的initWithCapacity:,初始化一個現有的(新創建的)實例。你還沒有創建一個,所以你發送initWithCapacity:消息到nil,這意味着它沒有效果。

您需要創建該數組,然後初始化該數組,然後將其分配給您的array變量,最好全部在同一行中。

還有一個問題,即您的表視圖在您收到applicationDidFinishLaunching:消息時已經請求了陣列。你還沒有一個,所以它什麼也得不到;當你創建一個,它已經問你,並得到它的答案,並不知道它應該再問。

創建您在initinitWithCoder:陣列(我相信你會需要後,如果您的應用程序委託是在筆尖),以及實施和使用Key-Value-Coding-compatible accessor methods以填補值的數組。當您發送自己的訪問者消息時,您將會導致KVO通知,它會提示需要再次請求數組的表視圖。直接分配給實例變量不會導致這種影響。

一對夫婦的其他東西......

你有兩種不同的三種方法[path stringByAppendingFormat:@"/%d.log", i]表達式。不要重複自己。將它移動到名爲logFileNameWithLogFileNumber:之類的方法,然後發送自己的消息來生成文件名。這將使代碼更清晰易於維護。

最後,作爲一種風格,您不應該使用stringByAppendingFormat:stringWithFormat:來構建路徑。使用stringByAppendingPathComponent:(在這種情況下,與stringWithFormat:一起生成文件名)。清晰度和路徑名稱 - 分隔符獨立是美德。

+0

非常感謝你!!!!!! – Frost 2010-07-01 17:13:36