ios - Objective C 中未找到方法

标签 ios objective-c

我正在尝试在 ObjectiveC 中创建一个全局函数或方法。这样我就可以从任何 View Controller 调用它。

我已经查看了这篇文章:How to create global functions in Objective-C

所以我所做的是在 Xcode 6 中创建新文件并选择一个类别下拉列表。为我创建了这两个 *.h 和 *.m 文件。我在其中添加了名为 SaveWeatherDataNow 的方法

//NSObject+SaveWeatherData.h
#import <Foundation/Foundation.h>

@interface NSObject (SaveWeatherData)

+(void)SaveWeatherDataNow:(NSString *)XML;

@end

//NSObject+SaveWeatherData.m
#import "NSObject+SaveWeatherData.h"

@implementation NSObject (SaveWeatherData)

+(void)SaveWeatherDataNow:(NSString *)XML
{

    NSLog(@"SaveWeatherDataNow XML lenght: %ld", [XML length]);
}

@end

现在在我的另一个 View Controller 中,如果我调用此方法,那么编译器根本找不到它。我错过了什么?

//  v1CitiesAdd.m
#import "NSObject+SaveWeatherData.h"

@implementation v1CitiesAdd
...
...
-(IBAction) doneAction
{

...
[SaveWeatherData SaveWeatherDataNow:XML]; // Complier Error: Use of undeclared identifier SaveWeatherData

最佳答案

+更改为-(在(void)前面):

-(void)SaveWeatherDataNow:(NSString *)XML;

这样,您就可以引用 SaveWeatherData 对象中的方法。

不要忘记在头文件 (.h) 和类 (.m) 文件中更改它。

您也可以调用

[NSObject SaveWeatherDataNow:XML];

留下+。

===

当您使用 + 时,它是一个类方法。它在全局范围内工作,不知道也不关心单个对象。

当您使用 - 时,它是一个对象方法。它在特定对象内工作。

所以,如果有一个 Brick 类,

+(无效)粉碎;

会改变/更新每 block 要砸碎的砖 block 。

-(无效)粉碎;

会粉碎您发送该消息的特定砖 block 。

[myBrick1 粉碎];只会打碎一 block 砖。

[打砖 block ];会对所有砖 block 进行全局更改。

关于ios - Objective C 中未找到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28859306/

相关文章:

ios - 如何在 SWIFT 中从尾页开始水平 ScrollView

iOS:如何检测键盘变化事件

ios - CBCentralManagerDelegate 没有在 NSObject 中被调用

iphone - UIPickerView 不显示数据

objective-c - 更新 NSArray 上的值

objective-c - 具有混合 token /字符串输入的 NSTokenField,可能吗?

ios - 使用原生模块!跳过了 react-native 依赖项 'react-native-beacons-manager' 。找不到 podspec 文件

另一个文件中的 iOS UITextView 委托(delegate)

android - 移动应用程序 : how to show the OTP my app sends in a popup without leaving my app?

ios - 使用 SpriteKit 和 UITextView 的 UITextSelectionView 名称无法识别的选择器