[英]how call nsurlconnection delegate methods continuosly in iphone
[英]how to call delegate method, iphone
鑒於:
- classA及其委托
- classB上有一個按鈕
classA.h
@protocol classADelegate <NSObject>
- (void)method:(NSString *) name;
@end
@interface StoreChooser : UIViewController
@end
------------------------------------------------------
classA.m
-(IBAction)buttonCliked{
// invoke delegate method from classA at here
}
classB.h
@interface classB : UIViewController <classADelegate>
@end
------------------------------------------------------
// Conform delegate of classA
classB.m
- (void)method:(NSString *) name {
} @結束 - - - - - - - - - - - - - - - - - - - - - - - - -------
我的目標:我需要classB在buttonClicked動作中從classA調用方法委托
問題 :我應該怎么做才能實現自己的目標。
只是為了確保我們在同一頁面上:)
如果ClassA
具有委托ClassADelegate
。 這意味着當ClassA
發生某個“事件”時, ClassA
將要通過其委托通知其他某些類“事件”發生了ClassB
。 ClassA
將通過其委托ClassADelegate
進行此ClassADelegate
。
為此, ClassB
必須讓ClassA
知道它將充當ClassA
的委托。 通過實施協議中列出的未標記為@optional的所有方法, ClassB
必須“符合” ClassA
的協議。
在代碼中,您可以這樣做:
// ClassA's delegate
@protocol ClassADelegate <NSObject>
- (void) didDoSomethingCool:(NSString *) name;
@end
// ClassA definition
@interface ClassA
// We'll use this property to call the delegate.
// id<XXX> means that which ever class is assigned to id MUST conform to XXX
@property (nonatomic, assign) id<ClassADelegate> classADelegate;
- (void) doSomething;
@end
// Class A implementation
@implementation ClassA
@synthesize classADelegate;
- (void) doSomething
{
// Do cool things here.
// Now call delegate, in this example, this will be ClassB
[classADelegate didDoSomethingCool:@"Hello from Class A"];
}
現在我們需要連接ClassB
以便可以通知ClassA
發生了一些事情:
// ClassB definition
@interface ClassB<ClassADelegate>
// ClassB<ClassADelegate> lets the compiler know that ClassB is required to have all the
// non-optional method that are listed in ClassADelegate. In short, we say that
// ClassB conforms to the ClassADelegate.
{
ClassA *_classA;
}
@end
現在,在ClassB
的實現文件中的某處,我們具有以下內容。
// ClassB implementation
@implementation ClassB
- (id) init
{
self = [super init];
if(self)
{
// Just quickly creating an instance of ClassA.
_classA = [ClassA new];
// This is were we tell ClassA that ClassB is its delegate.
_classA.classADelegate = self;
}
return self;
}
- (void) dealloc
{
[_classA release];
[super dealloc];
}
- (void) didDoSomethingCool:(NSString *) name
{
// This is the method that ClassA will be calling via the
// [classADelegate didDoSomethingCool:@"Hello from Class A"] method call.
}
@end
我希望這有幫助 :)
將分配屬性添加到classA:
@property (nonatomic, assign) id<classADelegate> delegate;
然后在classB的viewDidLoad方法中,調用:
[myClassAObject setDelegate:self];
然后在A類中,只需調用:
if (_delegate && [_delegate respondsToSelector:@selector(method:)]) {
[_delegate method:@"string"];
}
ClassB需要對ClassA的引用。 該代碼雖然不完整,但是應該可以幫助您了解需要創建的關系。
B類
@interface classB: UIViewController <classADelegate>
@property (weak, nonatomic) id<classADelegate> delegate;
@end
班級
-(id)init {
self = [super init];
if (self) {
self.delegate = [[classADelegate alloc] init];
}
}
-(IBAction)buttonClicked {
[delegate method:@"name"];
}
您需要將委托對象存儲在classA中:
@interface classA : NSObject
{
id<classADelegate> _delegate;
}
@property (nonatomic, assign, readwrite) id<classADelegate> delegate;
並綜合屬性:
@implementation classA
...
@synthesize delegate = _delegate;
然后在需要調用委托的方法中,您需要測試委托對象和方法是否有效:
- (void)somethingHappened
{
if ([_delegate respondsToSelector:@selector(method:)])
{
[_delegate method:@"Andy"];
}
}
並最終符合B類中的委托協議:
@implementation classB
...
- (void)method:(NSString *)name
{
[self buttonCliked:nil];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.