나는 스스로 해결할 수없는 이상한 문제가 있습니다. 어떤 도움이나 생각이 부탁드립니다.NSMetadataQuery는 NSFileWrapper 폴더 번들을 찾지 못하지만 파일 만 있습니다 (그러나 거기에 있습니다).
문제 :
- NSMetadataQuery이 (TEST.TXT처럼) 일반 파일을 발견하지만 filewrapper 번들 (myWrapperDocument.pro)는
- 그러나, NSFileManager를 내 유비쿼터스 컨테이너에있는 모든 파일을 발견하지 - 그래서 거기에 파일이 있지만 NSMetadataQuery 그들을 찾을 수 없습니다!
사실 :
- UIDocument 기반 응용 프로그램 사용 NSFileWrappers (iOS 및 데스크톱 응용 프로그램에 대한)
- 공유 유비 컨테이너
- 맥 OS에 완벽하게 작동
- 가에 완벽하게 작동 내 iPad Mini 및 iPhone 4S 및 iPhone 3GS (iOS6 및 iOS5 실행)
- iPad1에서 작동하지 않습니다. 내 베타 테스터의 장치의 대부분 (iOS5를 실행 아이 패드 1, 2 & 3 또는 6) 내가 지금까지 무슨 짓을
:
- 공부 WWDC12 UIDocument & iCloud에 예 (CloudNotes.xcodeproj)
- 불행히도 운이없는 애플의 dev 포럼에서 공부 한 시간
- 많은 다른 조건을 테스트하고 자격 및 문서 설정을 확인했습니다 (시스템에서 알고있는 것처럼 폴더 있지만, 문서 다발)
- 지우기 및 편재 용기
에게 관련 코드를 재설정 :
타이틀먼트 정확해야;
- (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);
}
: 의 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>
유비쿼터스 컨테이너와 아이 클라우드 문서의 URL이 모두 괜찮 (I 문서 유형이 올바르게 등록 된 생각)
정말 이상한 점은 하나의 파일 "test.txt"로 쿼리가 반환되지만 나머지는 감지되지 않는 것입니다. 그러나 로그에서 볼 수 있듯이 컨테이너에는 84 개의 .pro 파일 (모두 "something.pro")이 있지만 쿼리는 "test.txt"하나만 찾습니다.
불행히도 NSFileManager를 사용하여 이러한 파일에 액세스하는 것은 옵션이 아닙니다. 해당 파일을 읽을 권한이없는 것 같습니다. 이 문제는 내 베타 테스터 기기를 새로 설치할 때도 발생하므로 컨테이너가 손상된 것으로 생각하지 않습니까?
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
난 정말 더 이상 어떻게 해야할지 모르겠어요. 가장 이상한 것은 일부 장치에서는 작동하지만 다른 장치에서는 전혀 작동하지 않는다는 것입니다.
나는이 문제에 대한 어떤 힌트에 대해서도 감사 할 것입니다. 고마워요!
패키지가 패키지로 나타나거나 다운로드 할 수 있습니까? "foo.pro"(실제 파일)를 검색하기 위해 술어를 변경하면 그 작업이 수행됩니까? –
예, 패키지가 표시되며 폴더가 아닌 파일로 표시됩니다. Foo.pro가 없습니다 (그러나 foo.txt는). 또한 모든 장치가 영향을받는 것은 아닙니다. 일부 장치는 완벽하게 작동하고 다른 장치는 전혀 작동하지 않습니다. 나는 그것이 FileWrapper/폴더와 관련이 있어야한다고 생각한다. 내 추측은 NSMetadataQuery가 폴더를보고하지 않는 것과 동시에 번들로 등록 되었기 때문에이 폴더의 내용을 무시하는 충돌이다. 번들이 올바르게 등록되지 않았다면, 래퍼의 내용이 나열 될 것으로 예상되지만, 그 경우도 아닙니다. – auco
문제가 무엇인지 모릅니다. 패키지/폴더의 구현이 잘 작동합니다. 술어로 % K == foo.pro를 사용하면 –