2011-02-03 17 views
1

小さなテキストエディタを開発していて、テーブルビューテンプレートを使い始めました。アプリケーションのDocumentsディレクトリの内容を表示するコードが追加されました。すべてOKです。ディレクトリとテーブルビューに表示されますが、スクロールを開始するとクラッシュします。私は何かが解放されていると思う。ここで私はあなたが文字列にobjectAtIndex:を呼び出そうとしているスタックトレースによると、コードとクラッシュログ:)スクロール時にUITableViewがクラッシュする

RootViewController.m

NSFileManager *directoryContent; 
- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self listDumpFiles]; 
} 
// Customize the number of sections in the table view. 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 


// Customize the number of rows in the table view. 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [directoryContent count]; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    // Configure the cell. 
    cell.text = [directoryContent objectAtIndex:indexPath.row]; 
    return cell; 
} 
- (void)listDumpFiles { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory]; 

    NSLog(@"%@", documentsDirectory); 
    return; 
} 

クラッシュログ

2011-02-03 17:38:16.516 uNotes[15352:40b] /Users/pablo/Library/Application Support/iPhone Simulator/4.2/Applications/DF298F31-5723-4A1E-9EAA-3353C34BDCB2/Documents 
2011-02-03 17:38:17.412 uNotes[15352:40b] -[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x9b243f0 
2011-02-03 17:38:17.413 uNotes[15352:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectAtIndex:]: unrecognized selector sent to instance 0x9b243f0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x00da7be9 __exceptionPreprocess + 185 
    1 libobjc.A.dylib      0x00efc5c2 objc_exception_throw + 47 
    2 CoreFoundation      0x00da96fb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 
    3 CoreFoundation      0x00d19366 ___forwarding___ + 966 
    4 CoreFoundation      0x00d18f22 _CF_forwarding_prep_0 + 50 
    5 uNotes        0x0000238c -[RootViewController tableView:cellForRowAtIndexPath:] + 216 
    6 UIKit        0x003247fa -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:withIndexPath:] + 634 
    7 UIKit        0x0031a77f -[UITableView(UITableViewInternal) _createPreparedCellForGlobalRow:] + 75 
    8 UIKit        0x0032f450 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1561 
    9 UIKit        0x00327538 -[UITableView layoutSubviews] + 242 
    10 QuartzCore       0x01c65451 -[CALayer layoutSublayers] + 181 
    11 QuartzCore       0x01c6517c CALayerLayoutIfNeeded + 220 
    12 QuartzCore       0x01c5e37c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 310 
    13 QuartzCore       0x01c5e0d0 _ZN2CA11Transaction6commitEv + 292 
    14 QuartzCore       0x01c8e7d5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 99 
    15 CoreFoundation      0x00d88fbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27 
    16 CoreFoundation      0x00d1e0e7 __CFRunLoopDoObservers + 295 
    17 CoreFoundation      0x00ce6bd7 __CFRunLoopRun + 1575 
    18 CoreFoundation      0x00ce6240 CFRunLoopRunSpecific + 208 
    19 CoreFoundation      0x00ce6161 CFRunLoopRunInMode + 97 
    20 GraphicsServices     0x016dc268 GSEventRunModal + 217 
    21 GraphicsServices     0x016dc32d GSEventRun + 115 
    22 UIKit        0x002bf42e UIApplicationMain + 1160 
    23 uNotes        0x00001fc0 main + 102 
    24 uNotes        0x00001f51 start + 53 
) 
terminate called after throwing an instance of 'NSException' 
Program received signal: “SIGABRT”. 
(gdb) 

答えて

4

を残しました。おそらくメモリ管理の問題です。 Enable zombiesを呼び出して、呼び出されているオブジェクトに関する詳細情報を取得します。

UPDATE

それは私がdirectoryContentsAtPath:は自動解放オブジェクトを返すと思います

directoryContent = [[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory];

おそらく、このラインです。 directoryContentがヘッダーに@property(nonatomic, retain)として設定されている場合は、を使用して設定することができ、NSFileManagerが返すオブジェクトを自動的に保持します。そうでなければ、directoryContent = [[[NSFileManager defaultManager] directoryContentsAtPath: documentsDirectory] retain];に電話することができます。

+0

私はこれを得て、何かがリリースされ、それが必要だと思います: '2011-02-03 17:54:51.102 uNotes [15418:40b]/Users/pablo /ライブラリ/ Application Support/iPhone Simulator/4.2 /アプリケーション - DF298F31-5723-4A1E-9EAA-3353C34BDCB2/Documents 2011-02-03 17:54:56.785 uNotes [15418:40b] *** - [__ NSArrayM objectAtIndex:]:メッセージが割り当て解除されたインスタンスに送信されました。0x921fc60 (gdb) ' – pmerino

+0

@ zak0xsis更新を確認してください –

+0

うわー!それは仲間を働いた!本当にありがとう! :)ここに投票する方法は何ですか? – pmerino

関連する問題