2012-11-07 67 views
1

林與一個單工作陣列中刪除對象來存儲一些數據,她是實施從存儲在一個單

static ApplicationData *sharedData = nil; 
@implementation ApplicationData 
@synthesize list; 

+ (id)sharedData 
{ 
    static dispatch_once_t dis; 
    dispatch_once(&dis, ^{ 
    if (sharedData == nil) sharedData = [[self alloc] init]; 
}); 
return sharedData; 
} 

    - (id)init 
    { 
    if (self = [super init]) 
    { 
    list = [[NSMutableArray alloc]init]; 
    } 
    return self; 
    } 

如果列表具有小於3(2 <)對象i中的應用程序崩潰與「索引0越過空陣列的邊界「

// NSMutableArray *anArray = [[NSMutableArray alloc]initWithObjects:@"", nil]; 
while ([[[ApplicationData sharedData]list] lastObject] != nil) 
{ 
    File *file = [[[ApplicationData sharedData]list] lastObject]; 

    BOOL isDir; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:file.filePath isDirectory:&isDir]) 
     { 
      NSMutableDictionary *tmpDic = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:file.fileName,file.filePath,logEnteryErrorfileNotFoundDisplayName,[formatter stringFromDate:[NSDate date]], nil] forKeys:[NSArray arrayWithObjects:logShredFileName,logShredFilePath,logShredStatue,logShredDate, nil]]; 

      [logArray addObject:tmpDic]; 

      errorOccured = YES; 
      [[[ApplicationData sharedData]list] removeLastObject]; 
      continue; 
     } 
    ... other code 

    } 

如果我使用完美工作的anArray。 有什麼問題?

+0

我在測試應用程序中使用了你的代碼,添加了5個對象列表,然後運行while循環的修改版本(只是記錄,然後刪除最後一個對象),並且一切正常。你確定你的錯誤發生在這裏的代碼? – rdelmar

回答

1

這很奇怪,你可能做了一些其他的事情來實現這一點。你爲什麼不使用- (void)removeAllObjects

也許你在while循環中刪除對象的最後一行,即:

while ([[[ApplicationData sharedData]list] count] != 0) 
{ 
    // remove object from list 
    // ... 
    [[[ApplicationData sharedData]list] removeLastObject]; 
} 

而只是一個說明,你不需要在sharedData檢查if (sharedData == nil)只要它保證只執行一次。 (除非你在靜態變量之外做某些事情,但這不是我認爲應該如何完成的)

+0

其實這並不是所有的代碼,我的問題是我必須刪除tableview中的文件,所以「list」包含路徑文件列表,並且我必須檢查文件是否仍可訪問(並將錯誤列表保存在文件),如果是我從磁盤和列表中刪除文件,所以我不能使用removeAllObjects。我更新了代碼。 –

+0

感謝您的幫助,我解決了這個問題,添加了這個:if([[[ApplicationData sharedData] list] count] == 1) {[[ApplicationData sharedData] list] removeAllObjects];}這不是最乾淨的方法但那工作,我仍然不明白是什麼問題:( –

相關問題