gpt4 book ai didi

cocoa-touch - NSMetadataQuery 找不到 NSFileWrapper 文件夹包,只有文件(但它们在那里)

转载 作者:行者123 更新时间:2023-12-04 05:10:50 26 4
gpt4 key购买 nike

我有一个奇怪的问题,我似乎无法自己解决。任何帮助或想法表示赞赏。

问题:

  • NSMetadataQuery 找到正常文件(如 test.txt)但没有文件包装器
    捆绑包(myWrapperDocument.pro)
  • 但是,NSFileManager 找到了我的 ubiquity 容器中的所有文件——所以文件都在那里,但是 NSMetadataQuery 没有找到它们!

  • 事实:
  • 基于 UIDocument 的应用程序使用 NSFileWrappers
  • 共享 Ubiquity 容器(适用于 iOS 和桌面应用程序)
  • 在 Mac OS 上完美运行
  • 在我的 iPad Mini 和我的 iPhone 4S 和 iPhone 3GS(运行 iOS6 和 iOS5)上完美运行
  • 不适用于我的 iPad1 和我的大多数 beta 测试设备(运行 iOS5 或 6 的 iPad 1、2 和 3)

  • 到目前为止我做了什么:
  • 学习了 WWDC12 UIDocument 和 iCloud 示例 (CloudNotes.xcodeproj)
  • 在苹果的开发论坛和这里学习了几个小时,不幸的是没有任何运气
  • 测试了许多不同的谓词,检查了权利和文档设置(因此系统知道它不是文件夹,而是文档包)
  • 清除和重置 Ubiquity 容器

  • 相关代码:

    权利应该是正确的;
    Info.plist 文档设置(我认为文档类型已正确注册)
    <key>CFBundleDocumentTypes</key>
    <array>
    <dict>
    <key>CFBundleTypeExtensions</key>
    <array>
    <string>pro</string>
    </array>
    <key>CFBundleTypeName</key>
    <string>Prowriting Sketch</string>
    <key>LSItemContentTypes</key>
    <array>
    <string>de.ac.prowriting.sketch</string>
    </array>
    <key>LSTypeIsPackage</key>
    <true/>
    </dict>



    <key>UTExportedTypeDeclarations</key>
    <array>
    <dict>
    <key>CFBundleTypeExtensions</key>
    <array>
    <string>pro</string>
    </array>
    <key>LSTypeIsPackage</key>
    <true/>
    <key>UTTypeConformsTo</key>
    <array>
    <string>com.apple.package</string>
    </array>
    <key>UTTypeDescription</key>
    <string>Prowriting Sketch</string>
    <key>UTTypeIdentifier</key>
    <string>de.ac.prowriting.sketch</string>
    </dict>

    ubiquity 容器和 iCloud 文档 url 都很好,这就是我设置查询的方式:
    - (void)startMetadataQuery {
    // ...
    [self.query setSearchScopes:@[NSMetadataQueryUbiquitousDocumentsScope]];

    // search for all .pro documents, also tried other predicates, see below
    NSString *predicate = [NSString stringWithFormat:@"%K like '*'"];
    [self.query setPredicate:[NSPredicate predicateWithFormat:predicate, NSMetadataItemFSNameKey]];

    // register observer (...)
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishMetadataQuery:) name:NSMetadataQueryDidFinishGatheringNotification object:nil];

    [self.query startQuery];
    }

    - (void)didFinishMetadataQuery:(NSNotification*)notification {
    [self.query disableUpdates];
    NSLog(@"+++ found %i results: \n%@", self.query.resultCount, self.query.results);
    NSLog(@"+++ Results in iCloud folder: %i", [self.fileManager contentsOfDirectoryAtPath:self.iCloudDocumentsFolder.path error:nil].count);
    }

    真正奇怪的是,查询只返回一个文件“test.txt”,而其他文件仍未被发现。但是从日志中可以看到,容器有 84 个 .pro 文件(都称为“something.pro”),但查询只找到了一个“test.txt”。

    不幸的是,使用 NSFileManager 访问这些文件不是一种选择,因为我似乎无权阅读这些文件。我认为我的容器没有损坏,因为这个问题也发生在我的 beta 测试设备的全新安装上?
    2013-02-18 +++ found 1 results: ("<NSMetadataItem: 0x3ac390> /private/var/mobile/Library/Mobile Documents/ABCD123456~de~ac~prowriting/Documents/test.txt")
    2013-02-18 +++ Results in iCloud folder: 84

    我认为这是谓词,但是:
    @"%K like '*.pro*'"                // returns nothing
    @"%%K like '*.*'" // returns only the test.txt file
    @"%%K like '*'" // returns only the test.txt file
    @"%K LIKE *" // returns only the test.txt file
    @"NSMetadataItemFSNameKey == '*'" // returns only the test.txt file

    我真的不知道该怎么办了。
    最奇怪的是,它可以在某些设备上工作,而在其他设备上根本不工作。

    我将非常感谢有关此问题的任何提示。非常感谢!

    最佳答案

    奇怪的是,我不得不 删除 LSItemContentTypes info.plist 文件中的设置:

    <key>LSItemContentTypes</key>
    <array>
    <string>de.ac.prowriting.sketch</string>
    </array>

    此设置是为什么我导出的自定义 UTI 文件包装器文件类型未正确识别为文件,而是解释为文件夹的原因。 NSMetadataQuery 不查询文件夹,这就是它没有找到我的任何文件的原因。

    不幸的是,我还有一个 Mac 应用程序,我的自定义文件类型在桌面上正确注册,影响了 Mobile Documents iCloud 文件夹;所以这就是为什么它可以在我的大多数设备上运行,但在我的测试人员中没有。

    关于cocoa-touch - NSMetadataQuery 找不到 NSFileWrapper 文件夹包,只有文件(但它们在那里),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940602/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com