我正在尝试在 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)SaveWeatherDataNowNSString *)XML;
@end
//NSObject+SaveWeatherData.m
#import "NSObject+SaveWeatherData.h"
@implementation NSObject (SaveWeatherData)
+(void)SaveWeatherDataNowNSString *)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
Best Answer-推荐答案 strong>
把+ 改成- (在(void) 前面):
-(void)SaveWeatherDataNowNSString *)XML;
这样,您可以在 SaveWeatherData 对象中引用该方法。
不要忘记在头文件 (.h) 和类 (.m) 文件中更改它。
你也可以打电话
[NSObject SaveWeatherDataNow:XML];
留下+号。
===
当你使用 + 时,它是一个类方法。它在全局范围内工作,不知道也不关心单个对象。
当你使用 - 时,它是一个对象方法。它适用于特定对象。
所以,如果有一个 Brick 类,
+(void) 粉碎;
会改变/更新每一 block 要砸的砖。
-(void) 粉碎;
会打碎您发送该消息的特定砖 block 。
[myBrick1 粉碎];只会打碎一 block 砖。
[碎砖];会改变所有砖 block 的全局性。
关于ios - 在 Objective C 中找不到方法,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/28859306/
|