Rob*_*Mao 3 iphone objective-c ios
ALAssetsLibrary类中有2个"writeImageToSavedPhotosAlbum"方法:
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef
metadata:(NSDictionary *)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
Run Code Online (Sandbox Code Playgroud)
(适用于iOS 4.1+)
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef
orientation:(ALAssetOrientation)orientation
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
Run Code Online (Sandbox Code Playgroud)
(适用于iOS 4.0+)
我在我的代码中使用第一个(需要iOS 4.1),它将在iOS 4.0设备上崩溃.我试图用来respondsToSelector检查支持哪种方法,但看起来像选择器只检查方法名称,而不是参数.
我读了一些建议,觉得纯粹检查操作系统版本可能不太好,所以有什么类似于respondstoselector可以帮我解决这个问题吗?
这些方法具有不同的名称,因此您可以单独测试它们.
if ([assetsLibrary respondsToSelector:
@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]) {
// Now you can safely use this method.
}
Run Code Online (Sandbox Code Playgroud)
如果你想测试另一个你会使用的@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:).
您误解了Objective-C方法命名系统.选择器是所有 foo:bar:baz: 组合的组合.因此,在这种情况下,没有调用方法writeImageToSavedPhotosAlbum.第一个是,作为选择器,对应于
@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)
Run Code Online (Sandbox Code Playgroud)
第二个是
@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)
Run Code Online (Sandbox Code Playgroud)
在您的代码中,检查第一个选择器是否可用,如
if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){
....
}
Run Code Online (Sandbox Code Playgroud)
这应该区分第一个是否可用.
| 归档时间: |
|
| 查看次数: |
817 次 |
| 最近记录: |