0

2つのビューコントローラーがあり、最初のビューと2番目のビューコントローラーがuipopovercontrollerにあるアプリケーションがあります。プロトコルを作成したため、最初のビューに2番目のビューコントローラーの値が必要です。これが私のコードです。#import #import "SearchPopoverController.h" #import "AppDelegate.h"

@interface ViewController : UIViewController<PassSearchValueDelegate>{
AppDelegate *appDelegate;

SearchPopoverController *popSearch;

IBOutlet UILabel *lblAdd;
}

-(IBAction)showpop:(id)sender;
@end


#import "ViewController.h"

// my ViewController.m file code

-(void) getLocationList:(NSString *)strSearch{
lblAdd.text = strSearch;
}
-(IBAction)showpop:(id)sender{
if(![appDelegate.delObjSearchPopoverCon isPopoverVisible]){
    SearchPopoverController *popser = [[SearchPopoverController alloc] init];
    popSearch = popser;
    [popSearch setDelegate:self];

    appDelegate.delObjSearchPopoverCon = [[UIPopoverController alloc] initWithContentViewController:popSearch] ;

    [appDelegate.delObjSearchPopoverCon setPopoverContentSize:CGSizeMake(400 , 150)];
    [appDelegate.delObjSearchPopoverCon presentPopoverFromRect:CGRectMake(0, 0, 1, 1) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];


}

}

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

@protocol PassSearchValueDelegate 
@required
-(void) getLocationList:(NSString *)strSearch;
@end
@interface SearchPopoverController : UIViewController <UITextFieldDelegate>{
AppDelegate *appDelegate;
IBOutlet UITextField *txtSearchAdd;
IBOutlet UILabel *lblSearchAdd;

id<PassSearchValueDelegate> _delegate;
}
@property (retain) id _delegate;
@end


//  my SearchPopoverController.m file code

-(IBAction)btnDoneSearch_clicked:(id)sender{

NSString *strAdd = [txtSearchAdd.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
strAdd = [strAdd stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

[appDelegate.delObjSearchPopoverCon dismissPopoverAnimated:YES];

if (strAdd != nil || strAdd.length != 0) {
    [_delegate getLocationList:strAdd];
}
}

この行で警告が表示されます。

[popSearch setDelegate:self];

次の行でアプリがクラッシュします。

これを手伝ってください。どんな助けでもありがたいです。

4

2 に答える 2

0

名前_delegatedelegate 変更する必要があります

@property (retain) id delegate;

@property (assign) id<PassSearchValueDelegate> delegate;

また、PassSearchValueDelegate.m追加で

@implementation PassSearchValueDelegate //After this 
@synthesize delegate; //add this
于 2012-06-26T07:29:42.153 に答える
0
id<PassSearchValueDelegate> _delegate;
// ...
@property (retain) id _delegate;

プロパティには名前を付ける必要があり、インスタンス変数delegateを使用するように合成する必要があります。_delegateプロパティタイプでプロトコルも指定する必要があります。

さらに、デリゲートはassign(またはweakARCの下に)プロパティである必要があります。

于 2012-06-26T07:30:15.493 に答える