0

Utilsファイルを作成して、いくつかの関数を作成し、それらをいくつかのクラスで使用したいのですが、その方法がわかりません。

私は持っています:

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);

また、関数を呼び出すとクラッシュします。私は何をすべきか?

ありがとう

4

2 に答える 2

2

クラスがプロトコルに準拠していることを ( を追加して) 宣言すると、このクラスがプロトコルで定義されたすべてのメソッドを実装していることをコンパイラーに伝えます。Protocol はクラスではありません - メソッドの単なるリストです。したがって、コードには、Utils というプロトコル コールと、Utils というクラスがありました。プロトコルに準拠していましたが、メソッドを実装していませんでした。これが、colorToHex を呼び出そうとしたときにプログラムがクラッシュした理由です。あなたのケースで行う必要があるのは、StyleTableViewController で Util オブジェクトを作成し、それを使用して colorToHex メソッドを呼び出すか、colorToHex メソッドをクラス メソッドにして、必要に応じて Util クラスから呼び出すことです。別のオプションは、StyleTableViewController を Utils のサブクラスにすることですが、これが良い設計になるとは思えません。

于 2012-07-30T21:29:16.933 に答える
1

もう 1 つのオプションは、カテゴリUtilsをに追加することUIColorです。あなたが求めたものとは正確には異なりますが、プロトコルを使用するよりもエレガントに問題を解決します。

于 2012-07-30T22:11:51.827 に答える