2012-07-30 60 views
0

我想创建一个Utils文件,有一些功能并在某些类中使用它们,但我不知道如何去做。如何在目标中创建一个协议-C

我:

Utils.h

#import <Foundation/Foundation.h> 

@protocol Utils 

@optional 

-(NSString*)colorToHex:(UIColor*)color; 

@end 

@interface Utils : NSObject 

@end 

Utils.m

#import "Utils.h" 

@implementation Utils 

-(NSString*)colorToHex:(UIColor*)color{ 
    return @"Working"; 
} 

@end 

mainClass.h(片段)

@interface StyleTableViewController : UITableViewController <Utils> 

mainClass.m(电话)

NSString *myString = [self colorToHex:color]; 
NSLog(@"%@",myString); 

它调用函数时会崩溃。我该怎么办?

感谢

+0

我不确定你想要做什么以及这与协议有什么关系? – starbugs 2012-07-30 21:19:17

回答

2

当你的国家,你的类遵循的协议(加入),你告诉该类实现在协议中定义的所有方法的编译器。 协议不是一个类 - 它只是一个方法列表。所以在你的代码中,你有一个协议调用Utils和一个名为Utils的类。您遵守协议,但没有实现这些方法,这就是为什么当您尝试调用colorToHex时程序崩溃。 你需要做的是在你的StyleTableViewController中创建一个Util对象,并用它来调用colorToHex方法,或者使colorToHex方法成为一个类方法,并在需要时从Util类调用它。另一种选择是将StyleTableViewController作为Utils的一个子类,但我怀疑这是否是一个好设计。

+0

我完全不理解协议的使用,感谢解释! – Sylphos 2012-07-30 23:30:12

1

另一种选择是将类别Utils添加到UIColor。不完全是你所要求的,但它比使用协议更加优雅地解决了你的问题。