【问题标题】:Check if an overloading method exist in device iOS platform检查设备iOS平台是否存在重载方法
【发布时间】:2011-07-27 05:18:56
【问题描述】:

ALAssetsLibrary 类中有 2 个“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 来检查支持哪种方法,但是看起来选择器只检查方法名称,而不是参数。

我看了一些建议,觉得单纯检查操作系统版本可能不太好,那么有什么类似于responstoselector的东西可以帮助我解决这个问题吗?

【问题讨论】:

  • 参数是什么意思?您现在是如何实施的?

标签: iphone objective-c ios


【解决方案1】:

您误解了 Objective-C 方法命名系统。选择器是所有foo:bar:baz:组合的组合。 因此,在这种情况下,没有称为 writeImageToSavedPhotosAlbum 的方法。第一个是,作为选择器,对应

@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)

第二个是

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)

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

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您想测试另一个,您可以使用@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)

    【讨论】:

      【解决方案3】:

      然后您可以使用操作系统版本来区分它们。怎么样?

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 2021-07-21
        • 2019-01-04
        • 1970-01-01
        • 2021-05-28
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        相关资源
        最近更新 更多