【问题标题】:Error with Incompatible Integer to Pointer Conversion不兼容的整数到指针转换的错误
【发布时间】:2015-09-14 19:42:51
【问题描述】:

当我尝试运行此代码时,我收到一条错误消息:

不兼容的整数到指针转换将'BOOL'(又名'signed char')发送到'BOOL *'类型的参数(又名'signed char *')

上线

[self.MMdelegate addItemViewControllerMM:self didCheck1:checked1 didCheck2:checked2];

MatchModeViewController.h

@class MatchModeViewController;

@protocol MatchModeViewControllerDelegate <NSObject>

- (void)addItemViewControllerMM:(MatchModeViewController *)MMcontroller didCheck1:(BOOL *)MMbool didCheck2:(BOOL *)MMbool2;

@end

 @interface MatchModeViewController : UIViewController {

 BOOL checked1;   
 BOOL checked2;

}

@property BOOL checked1;
@property BOOL checked2;

@property (weak, nonatomic) IBOutlet UIButton *checkBoxButton1;

@property (weak, nonatomic) IBOutlet UIButton *checkBoxButton2;

- (IBAction)checkButton1:(id)sender;

- (IBAction)checkButton2:(id)sender;

@end

MatchModeViewController.m

@synthesize checkBoxButton1;
@synthesize checkBoxButton2;
@synthesize checked2;
@synthesize checked1;

- (void)viewDidLoad {
    [super viewDidLoad];

checked1 = NO;
checked2 = NO;

    [checkBoxButton1 setImage:[UIImage imageNamed:@"CheckBox.png"] forState: UIControlStateNormal];
    [checkBoxButton2 setImage:[UIImage imageNamed:@"CheckBox.png"] forState: UIControlStateNormal];


    UIBarButtonItem *saveButtonMM = [[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveButtonMMPressed)];
    self.navigationItem.rightBarButtonItem = saveButtonMM;

}

-(instancetype) init {
    if (self = [super init]) {

    }
    return self;
   }
   - (void) saveButtonMMPressed {

        if([self.MMdelegate respondsToSelector:@selector(addItemViewControllerMM:didCheck1:didCheck2:)]){

            [self.MMdelegate addItemViewControllerMM:self didCheck1: checked1 didCheck2: checked2 ];

            [[NSNotificationCenter defaultCenter]postNotificationName:@"MMNOTIFICATIONNAME" object:nil];
    }

         [self.navigationController popViewControllerAnimated:YES ];

         [self performSelector:@selector(saveButtonMMPressed) withObject:nil afterDelay:0.25];     
    }

我是 xcode 的初学者,非常感谢任何帮助。

【问题讨论】:

  • 任何你有BOOL *的地方你都需要摆脱*
  • 这个方法的定义是什么样的:addItemViewControllerMM:didCheck1:didCheck2?

标签: ios objective-c


【解决方案1】:

您使用指向BOOL 的指针错误地定义了您的协议​​方法。你想要:

@protocol MatchModeViewControllerDelegate <NSObject>

- (void)addItemViewControllerMM:(MatchModeViewController *)MMcontroller didCheck1:(BOOL)MMbool didCheck2:(BOOL)MMbool2;

@end

同时更新此方法的任何实现以摆脱指针。

【讨论】:

    【解决方案2】:

    这更像是一道 C 题。 看看你的方法:

    - (void)addItemViewControllerMM:(MatchModeViewController *)MMcontroller didCheck1:(BOOL *)MMbool didCheck2:(BOOL *)MMbool2;
    

    看来MMboolMMbool2应该是输出参数,需要通过引用传递。

    所以,不要像这样调用:[self.MMdelegate addItemViewControllerMM:self didCheck1:checked1 didCheck2: checked2];

    你应该这样称呼它:[self.MMdelegate addItemViewControllerMM:self didCheck1:&amp;checked1 didCheck2:&amp;checked2 ];

    &amp; 放在checked1 之前发送变量的引用而不是值,因此您在方法中对checked1 所做的任何更改都将在调用它的函数中可见。

    乐: 或者,也许您不需要通过引用传递它们。在这种情况下,您应该将协议方法重新定义为 - (void)addItemViewControllerMM:(MatchModeViewController *)MMcontroller didCheck1:(BOOL)MMbool didCheck2:(BOOL)MMbool2; (不带 * 使 BOOLs 指针)

    【讨论】:

    • 我们谁是正确的?预期是可怕的。 :) 说真的,很难说应该改变哪种方式。
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多