About raywenderlich’s PhotoKeeper

在一个设备上产生的文件,在另一个设备上看不见,就好像两个设备上的用户不是同一个一样

猜测原因,该项目是7年前产生的, iCloud已经有了变化


原因找到了:

        [fileURL getResourceValue:&aBool forKey:NSURLIsHiddenKey error:nil];

返回值 aBool 是 nil, 如果该文档是其它设备产生的

为什么返回值是nil呢?因为初值是nil,  上述函数在执行时出错, aBool根本就没有被赋值,aBool始终保持初值。 改成

        NSError *err = nil;

        BOOL gotResourceValueOfIsHidden = [fileURL getResourceValue:&aBool forKey:NSURLIsHiddenKey error:&err];

        if ( !gotResourceValueOfIsHidden ) {

          NSLog(@”Cannot getResourceValue for this file, error:\n%@”, err);

          [_iCloudURLs addObject:fileURL];

        }

就看得清楚了。下面是报错信息:

Cannot getResourceValue for this file, error:

Error Domain=NSCocoaErrorDomain Code=260 “The file “Photo.ptk” couldn’t be opened because there is no such file.” UserInfo={NSURL=file:///private/var/mobile/Library/Mobile%20Documents/iCloud~com~lshuzhi~PhotoKeeper/Documents/Photo.ptk, NSFilePath=/private/var/mobile/Library/Mobile Documents/iCloud~com~lshuzhi~PhotoKeeper/Documents/Photo.ptk, NSUnderlyingError=0x283b0c5d0 {Error Domain=NSPOSIXErrorDomain Code=2 “No such file or directory”}}

A设备产生的文件在B设备上只能看到Metadata,其文件本身无法访问(属性值也无法通过getResourceValue访问),下载之后才能使用(如果使用UIDocument来open则隐含了下载)

Leave a Reply

Your email address will not be published. Required fields are marked *