【问题标题】:NSArray: Detect And Remove Non-Existent Objects (Files)NSArray:检测并删除不存在的对象(文件)
【发布时间】:2011-11-23 22:22:40
【问题描述】:

使用AQGridview 和苹果提供的DocInteraction 示例,我可以在我的应用程序的文档目录中以网格格式表示我的应用程序包中的文件和通过iTunes 提供的文件(duh)。如果我连接我的 iPad 并通过 iTunes 添加一个文件,它会很好地添加它,但是当我从 iTunes 中删除一个应用程序仍然打开的文件时,它不会从网格或数组中删除该文件。当我点击文件时它甚至不会引发错误,它只是打开一个空文件或空白文件。如果 iTunes(或者更确切地说是文档目录)中也不存在该项目,我如何从它们存储的数组中删除项目(因为我知道这最终是答案)?

编辑:在 AQGridView 的上下文中,我的代码正在检测文档目录中的更改,并正在更新对象的 NSMutableArray,但更改并未反映在网格上。 [self.gridView deleteItemsAtIndices:<#(NSIndexSet *)#> withAnimation:<#(AQGridViewItemAnimation)#>]; 方法在这种情况下似乎不起作用。

【问题讨论】:

    标签: objective-c ios nsarray itunes aqgridview


    【解决方案1】:

    我假设你的 NSArray 中填充了 NSString 形式的路径。

    NSArray *existingPaths = [paths filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSString *path, NSDictionary *bindings){
        return [[NSFileManager defaultManager] fileExistsAtPath:path];
    }]];
    

    【讨论】:

    • 2011-11-23 16:46:47.135 SheetMuse[4570:707] -[NSGlobalBlock evaluateWithObject:]:无法识别的选择器发送到实例 0x46578 2011-11-23 16 :46:47.140 SheetMuse [4570:707] ***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[NSGlobalBlock评估WithObject:]:无法识别的选择器发送到实例0x46578'
    • 我忘记了 NSPredicate 构造函数。我改变了答案。
    • 好的,我现在正在测试它。到现在为止还挺好。编辑:没有骰子!抱歉,但我认为这与未调用 - (void)directoryDidChange:(DirectoryWatcher *)folderWatcher 方法有关。感谢您的回答,我相信它会帮助其他人。
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多