检查iOS设备平台上是否存在重载方法

3

ALAssetsLibrary类中有两种“writeImageToSavedPhotosAlbum”方法:

- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
                            metadata:(NSDictionary *)metadata 
                     completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock  

(iOS 4.1+可用)
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
                         orientation:(ALAssetOrientation)orientation
                     completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

(适用于iOS 4.0+)
我在我的代码中使用第一个(需要iOS 4.1),它会在iOS 4.0设备上崩溃。我正在尝试使用respondsToSelector来检查哪个方法受支持,但看起来选择器只检查方法名称,而不是参数。
我阅读了一些建议,并认为仅通过检查操作系统版本可能不太好,那么是否有类似于respondstoselector的东西可以帮助我解决这个问题?

参数是什么意思?你现在是如何实现它的? - Deepak Danduprolu
3个回答

7

这些方法有不同的名称,因此您可以单独测试它们。

if ([assetsLibrary respondsToSelector:     @selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]) {
    // Now you can safely use this method.
}

如果您想测试其他内容,则需要使用@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)


7
你误解了Objective-C方法命名系统。选择器是所有foo: bar: baz:组合的结合体。因此,在这种情况下,不存在名为writeImageToSavedPhotosAlbum的方法。第一个作为选择器对应于。
@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)

第二个是

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)

在您的代码中,检查第一个选择器是否可用,如下所示:

if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){
      ....
}

这应该区分第一个是否可用。


0

然后你可以通过操作系统版本来区分它们。怎么样?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接