iOS - 如何创建我的所有控制器都可以调用的“实用程序”类

时间:2012-07-13 23:33:55

标签: objective-c ios ios5

我是iOS和obective-c的新手,所以我不太清楚如何最好地完成这个看似简单的任务。

我想要的是在伪代码中创建一个看起来像这样的类:

class UtilityClass
{
    // Have a method that I can pass parameters to 
    String doCalculation ( String art1 , String arg2 )
    {
        return arg1 + arg2;
    }
}

我的不确定性是:

1)xCode似乎倾向于以相对平坦的方式布置我的文件结构。那么我应该创建一个utils目录并将此文件放在utils / fileName下吗?通常我习惯于至少拥有一些src目录,但到目前为止我还没有被任何东西提示创建一个。 2)如何从控制器导入和调用此类/函数?

谢谢, 亚历

3 个答案:

答案 0 :(得分:15)

只需创建一个名为Utilities的新组,然后在其中创建您的类。像,

utils.h 
utils.m

稍后在ViewController的头文件中添加。

#import "utils.h"

如果这个utils类被非常胖的项目中的许多控制器使用的话,找一个名为的文件,应该在支持文件组内。

YourAppName-Prefix.pch

在该文件中,您有一个像这样的代码块,

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif

只需编辑此块并在此处添加utils.h引用,这样整个项目就可以创建utils对象而无需显式导入到自己的标题中。

像这样编辑。,

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
    #import "utils.h"
#endif

答案 1 :(得分:7)

首先在Xcode中创建一个新文件,然后取消选中 xib文件。根据需要为项目命名。并从NSObject扩展它。

用于创建静态方法,你必须替换函数start - to + like

接口。类

@interface Utility : NSObject
+ (int)getNumber;
+ (void)setNumber:(int)number;
@end

.m class

#import "Utility.h"

@implementation Utility

static int number = 1;

+ (int)getNumber {
  return number;
}

+ (void)setNumber:(int)newNumber {
  number = newNumber;
}

+ (id)alloc {
  [NSException raise:@"Cannot be instantiated!" format:@"Static class 'ClassName' cannot be instantiated!"];
  return nil;
}

@end

在任何其他ViewController中调用它,如

 NSLog(@"number = %d", [Utility getNumber]);
    [Utility setNumber:3];
    NSLog(@"number = %d", [Utility getNumber]);

for details..

答案 2 :(得分:4)

存储文件的位置取决于您,只需确保XCode知道在哪里找到它们。类本身应该像任何其他Objective C类一样,只是让它继承自NSObject而不是其中一个图形类:

// MyClass.h
@interface MyClass : NSObject {
    int instanceVar;
}
@property (nonatomic, assign) int property;
@end

// MyClass.m
#import "MyClass.h"
@implementation MyClass
@synthesize property;
-(id) init {
    ...
}
-(int) function  {
    ...
}
@end

要在另一个文件中使用该类,只需像任何其他类一样导入标题

#import "MyClass.h"