项目需求:保存图片到自定义相册。
问题:iOS7之前AssetsLibrary 来操作相册的。假如通过代码在系统相册中创建一个名为@"你丫产品狗"的相册用来保存应用中用户手动保存的图片,当用户手动删除这个@"你丫产品狗"的相册并再次保存图片,打开系统相册,oh,god! 并没有再次创建@"你丫产品狗"的相册。这个时候产品就开始汪汪汪啦。不管怎么跟产品和测死扯皮,这问题一定要解决,而且作为一名开发者,自己也不能忍受这样的bug。 只能通过其他技术解决这个问题。iOS8后苹果提供了Photos,恶心的bug,fuck off!
查看苹果官方文档
找到一个例子 不用多想速度查看
Listing 1Creating an asset and adding it to an album
哈哈 好漂亮的代码 。无奈功力尚浅,没有看懂。。。 PHPhotoLibrary PHAssetChangeRequest PHAssetCollectionChangeRequest PHObjectPlaceholder albumChangeReques 上面所涉及的类都点进去,看看文档中怎么介绍说明的。翻看文档的时候发现了PHFetchResult 这个类 其中有如下说明
还不太明白,是不是,OK, 写个demo试试。搜索下相关资料 然后在苹果文档中有这个几个方法-
+ (PHFetchResult *)fetchTopLevelUserCollectionsWithOptions:(nullablePHFetchOptions*)options;(void)enumerateObjectsUsingBlock:(void(^)(ObjectType obj,NSUIntegeridx,BOOL*stop))block;
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void(^)(ObjectType obj,NSUIntegeridx,BOOL*stop))block;
- (void)enumerateObjectsAtIndexes:(NSIndexSet*)s options:(NSEnumerationOptions)opts usingBlock:(void(^)(ObjectType obj,NSUIntegeridx,BOOL*stop))block;
看着这里忍不住 打印输出 obj 是什么东西。
其中titlte 是我们手动创建的相册。哈哈 有点眉目了。在输出窗口 (lldb)po exisitingCollection.tilte
error: property 'tilte' not found on object of type 'PHAssetCollection *'
error: 1 errors parsing expression
(lldb)
并不可以输出,看看文档 localizedTitle 也就是我们手动创建的相册,可以根据这个特性来检测 相册中已经存在@"你丫产品狗"的相册,这样及可以解决反复安装应用后创建多个自定义相册的问题。 再次用联想输出发现 33C5CE29-6366-4D45-BB0D-406D22360069/L0/040 是localIdentifier 识别的唯一标识。
demo