如何从另一个类文件中调用函数

Guy*_*ker 8 iphone xcode function

我非常熟悉编写基于VB的应用程序,但我是Xcode(和Objective C)的新手.我在网上经历了大量的教程,了解了基础知识以及如何与Interface Builder等进行交互.但是,我真的在努力学习C语言的一些基本概念,并感谢您提供的任何帮助.继承人我的问题......

我有一个简单的iPhone应用程序,它有一个视图控制器(FirstViewController)和一个子视图(SecondViewController)与相关的标题和类文件.

在FirstViewController.m中定义了一个函数

@implementation FirstViewController

- (void) writeToServer:(const uint8_t *) buf {
    [oStream write:buf maxLength:strlen((char*)buf)];   
}
Run Code Online (Sandbox Code Playgroud)

功能是什么并不重要.

我想在我的SecondViewController中使用这个函数,所以在SecondViewController.m中我导入了FirstViewController.h

#import "SecondViewController.h"
#import "FirstViewController.h"

@implementation SecondViewController

-(IBAction) SetButton: (id) sender {
    NSString *s = [@"Fill:" stringByAppendingString: FillLevelValue.text];
    NSString *strToSend = [s stringByAppendingString: @":"];
    const uint8_t *str = (uint8_t *) [strToSend cStringUsingEncoding:NSASCIIStringEncoding];
    FillLevelValue.text = strToSend;

    [FirstViewController writeToServer:str];
}
Run Code Online (Sandbox Code Playgroud)

最后一行是我的问题所在.XCode告诉我FirstViewController可能不响应writeToServer.当我尝试运行应用程序时,它会在调用此函数时崩溃.

我想我不完全理解如何共享函数,更重要的是,类之间的关系.

在理想的世界中,我将创建一个全局类来放置我的函数并根据需要调用它们.

任何建议都感激不尽.

gam*_*gul 31

在你的方法的deklaration:

- (void) writeToServer:(const uint8_t *) buf;
Run Code Online (Sandbox Code Playgroud)

- 在声明开头表示,它是一种即时方法.这意味着,您必须创建一个类的实例来调用它.如果有+,则该方法将是一个类方法,您可以按照您在代码中的方式调用它.

例:

@interface MyClass
{ }
 - (void) myInstanceMethod;
 + (void) myClassMethod;
@end
Run Code Online (Sandbox Code Playgroud)

然后在一些功能:

[MyClass myClassMethod]; // This is ok

//[MyClass myInstanceMethod]; // this doenst't work, you need an instance:

MyClass *theInstance = [[MyClass alloc] init];
[theInstance myInstanceMethod];
Run Code Online (Sandbox Code Playgroud)


Mih*_*ian 1

你需要写:

- (void) writeToServer:(const uint8_t *) buf;
Run Code Online (Sandbox Code Playgroud)

在您的 FirstViewController.h 文件中。这是向编译器提示该函数可用于该特定类。如果没有这个,您的代码仍然可以工作,因为实际的函数已实现,但您会收到警告,因为当您包含另一个源文件中的标头时,编译器不会检查 .m 文件中的现有函数。