第二次调用 textFieldDidEndEditing 时 NSFilemanager 不保存文件

发布于 2024-12-05 19:15:50 字数 1420 浏览 1 评论 0原文

我在更新 tableView 时遇到问题。

在由 rootviewcontroller 管理的弹出窗口的 tableView 中,显示了我的文档目录中的一些项目。在 detailViewcontroller 中,我使用 NSFilemanager 更改这些文件的名称。无论我做什么,tableView都不会显示新的。如果我关闭应用程序并再次打开它,我就能看到它们。目前,我尝试使用通知,但它不起作用......

编辑

我记录了我的文档目录,这绝对不是tableView问题,而且,它运行得很好,但是当我第二次进入时一些文本,没有任何反应...

DetailViewController

- (void)textFieldDidEndEditing:(UITextField *)tf
{
    textLabel.text = textField.text;
    NSString* newName = textLabel.text;
    newName = [newName stringByAppendingPathExtension:@"txt"];
    NSString* newPath = [[currentFilePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName]; 
    NSLog(@"%@",newPath);
    [[NSFileManager defaultManager] moveItemAtPath:currentFilePath toPath:newPath error:nil];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DataSaved" object:nil];

}

RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];
    self.clearsSelectionOnViewWillAppear = NO;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:@"DataSaved" object:nil];
}

- (void)dataSaved:(NSNotification *)notification
{
    [self loadDirectoryContents];
    [self.tableView reloadData];
}

I am having trouble with updating my tableView.

In the tableView of the popover managed by the rootviewcontroller, some items in my documents directory are displayed. In the detailViewcontroller, i change the names of those files by using the NSFilemanager. Regardless what I do, the tableView won't display the new ones. I get to see them if i close the app and open it again. At the moment, i try using notifications, but it doesn't work …

EDIT

I logged my documents directory, its definitely not a tableView problem, moreover, it works out well, but the second time I enter some text, nothing happens…

DetailViewController

- (void)textFieldDidEndEditing:(UITextField *)tf
{
    textLabel.text = textField.text;
    NSString* newName = textLabel.text;
    newName = [newName stringByAppendingPathExtension:@"txt"];
    NSString* newPath = [[currentFilePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:newName]; 
    NSLog(@"%@",newPath);
    [[NSFileManager defaultManager] moveItemAtPath:currentFilePath toPath:newPath error:nil];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"DataSaved" object:nil];

}

RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];
    self.clearsSelectionOnViewWillAppear = NO;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:@"DataSaved" object:nil];
}

- (void)dataSaved:(NSNotification *)notification
{
    [self loadDirectoryContents];
    [self.tableView reloadData];
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

静谧幽蓝 2024-12-12 19:15:50
[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

这条线看起来有点可疑。你是如何构建你的桌面视图的?

[self.tableView initWithFrame:self.tableView.frame style:UITableViewStyleGrouped];

This line looks a bit suspicious. How are you constructing your tableview?

陌生 2024-12-12 19:15:50

当我输入一些东西时它就起作用了。但是,如果我第二次输入某些内容而没有在 tableView 中选择任何内容,则文件管理器不会将该项目移动到路径。有什么建议吗?这似乎不是与 tableView 相关的问题。

我还认为我需要设置:

currentFilePath = newPath;

但这给了我一个 EXC_BAD_ACCESS。

It works out when I type in something. But if i type in something the second time without having anything selected in the tableView, the fileManager doesn't move the item to the path. Any suggestions? It doesnt seem to be a tableView related Problem.

I also thought I needed to set:

currentFilePath = newPath;

But that gave me a EXC_BAD_ACCESS.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文