Ios 如何使用协议

Ios 如何使用协议,ios,iphone,ios7,protocols,Ios,Iphone,Ios7,Protocols,我有两个视图控制器 服务提供者 工作位置 在ServiceProvider中,我有一个文本字段和一个选择按钮。 当用户单击“拾取”按钮时,它将重定向到包含位置列表的WorkLocation。 当用户选择任何位置,然后单击WorkLocation中的pick按钮时,它将重定向回带有locationName和Id的ServiceProvider页面。在ServiceProvider页面中,locationName将显示在已经存在的文本字段中 要执行此操作,我使用协议 工作位置声明: #import

我有两个视图控制器

服务提供者 工作位置 在ServiceProvider中,我有一个文本字段和一个选择按钮。 当用户单击“拾取”按钮时,它将重定向到包含位置列表的WorkLocation。 当用户选择任何位置,然后单击WorkLocation中的pick按钮时,它将重定向回带有locationName和Id的ServiceProvider页面。在ServiceProvider页面中,locationName将显示在已经存在的文本字段中

要执行此操作,我使用协议

工作位置声明:

 #import <UIKit/UIKit.h>
 #import "WorkDetailCell.h"

@protocol WorkLocationDetailViewDelegate <NSObject>
@required
    -(void)organizationInfo:(NSString *) organization_id name:(NSString *)name;
@end

@interface WorkLocationDetailsViewController :UIViewController < UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate >
{
    IBOutlet UITableView *workLocationTableView;
    IBOutlet UISearchBar *workLocationSearchBar;
    NSMutableArray *workDetailArray,*tempDataArray,*searchArray,*searchResultArray;
    BOOL search;
 }

 @property (nonatomic,retain) id < WorkLocationDetailViewDelegate > delegate;
以及在ServiceProvider实现文件中:

-(void)organizationInfo:(NSString*)organization_id name:(NSString *)name {
    NSString *id=organization_id;
    txtWorkLocation.text=name;
    NSLog(@"%@ %@",organization_id,name);
}
现在,当我从WorkLocation页面返回时,这个方法没有被调用。 服务提供者声明:

您必须将ServiceProvider设置为委托:

[WorkVC setDelegate:self];

为什么不使用prepareforsgue:method来设置目标视图控制器的文本字段?这将使视图控制器之间的通信以标准方式进行,并减少编码工作量


无论如何,实现协议的代码看起来还可以。您需要先检查WorkVC是否已启动,然后再设置其委托。

是否已将WorkLocationDetailsViewController委托分配给ServiceProvider类?WorkVC.delegate=self我看不到您将ServiceProvider设置为WorkLocationDetailsViewController的代理的任何地方。@Mikael和spaleja…建议您的方法。如果您理解我在这里试图实现的内容,您在doneButtonClicked:log your delegate:NSLog@%@,U delegate;我已经在我的seviceprovider实现ViewWillDisplay文件中完成了这项操作。-VoidViewWillDisplay:BOOLanimated{usernameLabel.text=[NSString stringWithFormat:@%@],[[NSUserDefaults standardUserDefaults]valueForKey:@first\u name],[NSUserDefaults standardUserDefaults]valueForKey:@last\u name];WorkVC.delegate=self}您在哪里启动WorkLocationDetailsViewController?比如:WorkLocationDetailsViewController*WorkVC=[WorkLocationDetailsViewController alloc]init];如果你明白我想做什么,那么就向我建议你做这件事的方法……或者我对这件事有更多的了解,如果你在WorkLocationDetailsViewController中记录该委托,你会看到什么?是的,我在设置其委托之前启动了WorkVC…但是当我记录(u delegate)时,我得到了空值…你能给出设置委托的代码吗?也许,这能让你对它有更多的了解。
#import "WorkLocationDetailsViewController.h"

@class RadioButtonView; 
@class WorkLocationDetailsViewController;

@protocol ServiceProviderProfileDelegate <NSObject>
@required
    -(void)setProImages:(UIImage *)img;
@end

@interface ServiceProviderProfileViewController : UIViewController < UINavigationControllerDelegate, UIImagePickerControllerDelegate, RadioButtonDelegate, WorkLocationDetailViewDelegate >
{
    NSString *gratuityStr,*paymentStr;
    RadioButtonView *gratuityGroup,*paymentGroup;
    IBOutlet UILabel *usernameLabel;
    NSString *gratuitySelection,*receivePayment;
    WorkLocationDetailsViewController *WorkVC;
}
[WorkVC setDelegate:self];