【发布时间】:2014-01-14 07:46:54
【问题描述】:
这个问题已经解决了,但在这个问题的底部还有一个请求。毕竟我会选择一个答案。
我正在创建一个使用AssetsLibrary framework 的静态库。当我在项目中使用它来测试是否有效时。当我调用AssetsLibrary 实例的enumerateGroupsWithTypes:usingBlock:failureBlock: 方法时,它什么也不返回。
我已经尝试了-
-
设置断点以查看它如何运行此方法。结果它没有进入传递给
usingBlock:的块,即ALAssetsLibraryGroupsEnumerationResultsBlock,或者failureBlock:。所以我一无所获。 -
将相同的枚举代码添加到我开头提到的项目中以尝试调用
AssetsLibrary的方法。效果很好很好。 -
测试是否被主线程阻塞,然后在主线程中运行。得到了和以前一样的结果。
对于这个问题,我找到了关于在静态库中使用媒体的其他问题的答案:https://stackoverflow.com/a/15331319/1583560,我不确定我是否遇到过同样的情况,他/她提到的媒体是包括访问AssetsLibrary,我猜这里没有。
希望有人能指点一下这个,谢谢:)
更新
这是我使用的代码 -
[[[ALAssetsLibrary alloc] init] enumerateGroupsWithTypes:ALAssetsGroupAll
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"%s",__PRETTY_FUNCTION__);
} failureBlock:^(NSError *error) {
NSLog(@"%s",__PRETTY_FUNCTION__);
}];
静态库中的代码和测试项目中的代码是一样的,唯一不同的是我做了一个模型类来访问静态库中的AssetsLibrary。
要清楚,这里是我在静态库中所做的一些更改 -
- 将 Target > Build Settings 中的
Build Product Path更改为$(PROJECT_DIR)/../build - 将所需的头文件移动到 Target > Build Phases > Copy Headers 中的 Project 部分
- 在 Target > Build Settings 中将
Skip Install设置为YES
环境相关-
- OS X 10.9.1
- Xcode 5.0.2
- 标准架构(包括 64 位)(静态库和项目)
- ARC
更多详情
这是我的建议,在这个静态库中制作一个易于访问的资产模型。
- 有一个组数组来存储所有相册,这里是
ALAssetsGroup,在设备中。 - 在此模型的
init处枚举专辑并存储到组数组中。 - 枚举照片,这是
ALAssets结果,由需要时给定的组。
而且这个模型使用单例模式。
顺便说一句,我试图在这个静态库中观察ALAssetsLibraryChangedNotification。它也不起作用。 AssetsLibrary前面有没有潜在的障碍物?
更新
我发现我在 init 我创建的模型时枚举了这些组。并且有线程使块不起作用。如果我在init 完成后触发枚举,将完美运行。而且我还找到了知道何时完成枚举(参见https://stackoverflow.com/a/13309871/1583560)以获取我存储的组数组的方法。
进一步,我仍然找不到 Apple 的文档,该文档解决了块的线程问题,为什么在 init 时不会调用它。如果有人可以为我指出,我将不胜感激:)。
【问题讨论】:
-
您好,感谢您询问代码。我已更新问题并将其添加到原始问题的末尾。
标签: ios static-libraries alassetslibrary