刪除後重新加載數據我有一個問題,即我似乎無法加載在我的tableView的數據。的tableView reloadData沒有文件目錄
我想要做的是用csv擴展名(我已經完成)在文檔目錄中填充我的tableView,然後按下一個按鈕,刪除所有顯示的文件並更新tableView。 按下按鈕時會刪除文檔目錄中的文件,但不會使用更新的內容重新加載tableView。
- 我已經使用斷點來確認正在運行reloadData。
- 我已經嘗試使用removeAllObjects在運行前清除我的數組 reloadData使用NSLog確認數組是空的,但是這個 不會更新表。
- 我已經嘗試設置陣列零運行reloadData之前,這也不行。
- 我已經嘗試將數組中的數據設置爲myArray = @ [];在 之前運行reloadData,這將覆蓋具有空白數據的陣列,但 不會更新該表。
我一直在使用這種方法,無需 任何成功嘗試:
dispatch_sync(dispatch_get_main_queue(), ^{ [self.tableView reloadData]; });
- 我已經檢查了我的代表對的tableView,他們似乎 正確,(其它所有功能在的tableView工程,包括 選擇/取消多項目和刪除個別項目 和每次tableView更新)。
- 我也搜索了類似於我的多個不同的問題,仍然沒有找到答案。
有人可以檢查我的方法,並告訴我爲什麼tableView不能正確重裝嗎?我敢肯定它的某些事情我做錯了,但我無法找到它。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [filePathsArray count];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MainCell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MainCell"];
}
_docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [_docPath objectAtIndex:0];
_fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.csv'"];
_csvFilesCell = [_fileList filteredArrayUsingPredicate:fltr];
NSLog(@"Contents of directory: %@", _csvFilesCell);
filePathsArray = [[NSFileManager defaultManager]contentsOfDirectoryAtPath:documentsDirectory error:nil];
cell.textLabel.text = [_csvFilesCell objectAtIndex:indexPath.row];
return cell;
}
-(IBAction) deleteStoredData:(id)sender
{
NSLog(@"Delete data button pressed");
UIAlertController*alert = [UIAlertController alertControllerWithTitle:@"Delete stored Data" message:@"Are you sure?" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* OK = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
NSFileManager *manager = [NSFileManager defaultManager];
// the preferred way to get the apps documents directory
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
// grab all the files in the documents dir
NSArray *allFiles = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];
// filter the array for only csv files
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.csv'"];
NSArray *csvFiles = [allFiles filteredArrayUsingPredicate:fltr];
// use fast enumeration to iterate the array
for (NSString *csvFile in csvFiles) {
NSLog(@"PATH %@ : FILE %@", documentsDirectory, csvFile);
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@", documentsDirectory, csvFile]
error:&error];
NSLog(@"Error: %@", error);
NSLog(@"OK button selected, all data deleted");
[self updateDeleteButton];
[self.tableView reloadData];
[alert dismissViewControllerAnimated:YES completion:nil];
}
}];
UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"Cancel button selected, no data deleted");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:OK];
[alert addAction:cancel];
[self presentViewController:alert animated:YES completion:nil];
}
它會不會解決您的問題,但你可以外面的呼叫轉移到'reloadData'和'dismissViewControllerAnimated' for循環。它效率低下,可能導致未定義的行爲。 – tomahh
謝謝你這樣做。 –