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)
你需要写:
- (void) writeToServer:(const uint8_t *) buf;
Run Code Online (Sandbox Code Playgroud)
在您的 FirstViewController.h 文件中。这是向编译器提示该函数可用于该特定类。如果没有这个,您的代码仍然可以工作,因为实际的函数已实现,但您会收到警告,因为当您包含另一个源文件中的标头时,编译器不会检查 .m 文件中的现有函数。
| 归档时间: |
|
| 查看次数: |
37906 次 |
| 最近记录: |