@synthesize не работает, и основные операции не работают в Objective-C.

StackOverflow https://stackoverflow.com/questions/1664803

Вопрос

Я не уверен, почему этот код не будет работать.Когда я нажимаю кнопку (действие:buttonclick), он должен изменить значение увеличения текста «r» в двух текстовых полях (MyTextLabel и MyTextLabel2) на единицу.Вот код:

MainView.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface MainView : UIView {
    IBOutlet UIButton *MyButton;
    IBOutlet UILabel *MyTextLabel;
    IBOutlet UILabel *MyTextLabel2;
}

@property (nonatomic, retain) UIButton *MyButton;
@property (nonatomic, retain) UILabel *MyTextLabel;
@property (nonatomic, retain) UILabel *MyTextLabel2;


- (IBAction)buttonclick;
@end

MainView.m:

#import "MainView.h"
#include <stdlib.h>
#include <libc.h>

@implementation MainView

@synthesize MyButton, MyTextLabel, MyTextLabel2;

int r;

- (IBAction)buttonclick {
    r++
    if(r < 50) {
        MyTextLabel.text = @"< 50";
    }
    else {
        MyTextLabel2.text = @"=> 50";
    }
}
@end
Это было полезно?

Решение

У меня такое ощущение, что что-то не так с тем, как ты используешь int r.Попробуйте поставить static int r; наверху @interface строку в MainView.h, а также добавьте под - (IBAction)buttonclick; линия:

+(void) initialize;

Затем удалите int r; с сайта MainView.m.Затем в MainView.m добавьте:

+(void) initialize {
   count = 0;
}

Другие советы

Я вижу две проблемы:

  1. Вы не можете заявить int r где оно у тебя есть.Вы должны объявить его в блоке переменных вашего интерфейса (где вы объявляете кнопку и метки или вне метода) или в определении метода.
  2. Строка с r++ не заканчивается точкой с запятой.

В своем вопросе вы не говорите, что именно не работает так, как вы этого ожидаете.Я предполагаю, что ваши розетки на самом деле подключены неправильно.Возможно, вы захотите добавить оператор журнала в buttonClick так:

NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);

Главное, чтобы убедиться, что это не так. nil.

В Objective-C имена переменных и свойств должны начинаться со строчной буквы, чтобы соответствовать протоколу кодирования ключ-значение (KVC) (всегда myButton, никогда MyButton).В @synthesize Директива полагается на это для создания сеттеров и геттеров.Таким образом, для myButton @synthesize будет генерировать -(void)setMyButton:(UIButton *)button и -(UIButton *)myButton.

Итак, сделайте MyButton и его коллеги строчными буквами и посмотрим, поможет ли это.

Методы действий всегда имеют аргумент отправителя, поэтому ваш -buttonClick: метод должен быть объявлен следующим образом:

-(IBAction) buttonClick: (id)sender {
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top