2012-03-16 91 views
1

如何聲明和實現將返回視圖屬性的協議? 例如我有一個名爲mainView的視圖,我希望它能夠在另一個視圖(例如customView)詢問它時返回數組。 我在做什麼是我在mainView實現文件中聲明瞭一個協議(帶有一個returnTheArray函數),並將customView設置爲採用此協議,但我堅持了這一點。我該怎麼做才能正確地工作?或者有更有效/簡單/正確的方法來做到這一點?謝謝。通過協議在兩個視圖控制器之間傳遞數據

+0

呃.. UIViewController? – meggar 2012-03-16 17:27:56

+0

是的。從UIViewController到UITableViewController – nemesis 2012-03-16 17:30:35

+0

我不明白爲什麼你需要一個協議,如果viewcontrollers互相引用,你可以只添加一個方法。 – meggar 2012-03-16 17:35:24

回答

2

協議本身只是函數/方法名稱,參數和返回值的聲明。作爲一個協議,只有當它被許多類實現時,我個人更喜歡在一個單獨的頭文件protocolName.h中聲明它。

符合協議的每個類都需要實現該方法。對我來說,它是如此簡單。

AClass.h

@itnerface ACLASS:NSObject的{ //一些性質 } // @property語句 @end

AClass.m

#include "BClass.h" 

@implementation AClass 

//@synthesize statements; 

- (void) aFunctionFetchingTheArray { 

    BClass *bClass = [[BClass alloc] initWithSomething:kParameter]; 

    NSArray *anArray = [bClass returnTheArray]; 

    //Do something with it 

} 

@end 

MyProtocol.h

@protocol MyProtocol 

- (NSArray *) returnTheArray; 

@end 

BClass.h

#include "MyProtocol.h" 

@interface BClass <MyProtocol> { 
// some properties in interface 
} 
// some @property 
// some methods 
@end 

BClass.m

#include "BClass.h" //No need to include MyProtocol.h here too, in this case 

- (NSArray *) returnTheArray { 
return [NSArray arrayWithObjects:@"A", [NSNumber numberWithtInt:1], [UIColor clearColor], somethingElse, evenMore, nil]; 
} 

// more methods 

@end 

請糾正我,如果我錯過了或者拼錯了重要的東西。

+0

值得一提的是委託方法的名稱約定(BClass遵循的協議中的方法通過)。看看這個:http://cocoawithlove.com/2009/06/method-names-in-objective-c.html – 2012-03-16 18:44:47

+0

謝謝!我會牢記這一點! – nemesis 2012-03-16 20:39:37

+0

你是什麼意思initWithSomething?我如何告訴AClass BClass * bClass是控制器BClass,而不僅僅是一些空的控制器? – nemesis 2012-03-16 21:19:40

相關問題