使用协议应用程序崩溃 ipad

Posted

技术标签:

【中文标题】使用协议应用程序崩溃 ipad【英文标题】:using protocol app getting crashed ipad 【发布时间】:2012-06-26 07:25:34 【问题描述】:

我有一个应用程序,我有两个视图控制器,我的第一个视图和第二个视图控制器在 uipopovercontroller 中。我想要第二个视图控制器在第一个视图中的值,因为我已经创建了协议。这是我的代码。 #进口 #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];

应用程序在下一行崩溃。

请帮助我。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:
id<PassSearchValueDelegate> _delegate;
// ...
@property (retain) id _delegate;

您的属性应该命名为 delegate 并且可以合成为使用 _delegate 实例变量。您还应该在属性类型上指定协议。

此外,委托应该是 assign(或 ARC 下的 weak)属性。

【讨论】:

【参考方案2】:

_delegate 重命名为delegate 你需要改变

@property (retain) id delegate;

@property (assign) id<PassSearchValueDelegate> delegate;

也在PassSearchValueDelegate.m添加

@implementation PassSearchValueDelegate //After this 
@synthesize delegate; //add this

【讨论】:

不应为委托使用保留属性。应该是assigned或weak。 是的,你是对的,我只是复制并粘贴了它,我会更新答案

以上是关于使用协议应用程序崩溃 ipad的主要内容,如果未能解决你的问题,请参考以下文章

iPad 应用程序在设备上崩溃

应用程序因内存使用率非常低而崩溃 iphone/iPad

.ipa 在 iPad 上崩溃

(iOS) iPad 应用程序在启动时随机崩溃

CoreData iPad 应用程序崩溃

UIVideoEditorController 在 iPad 上崩溃