Как я могу использовать IBOutlet из другого файла класса в другой файл .m?

#iphone #objective-c #ios #xcode

#iPhone #objective-c #iOS #xcode

Вопрос:

MyGems.h

 #import <UIKit/UIKit.h>


@interface MyGems : UIViewController {

    IBOutlet UIImageView *lock1;
  

Collect.m

 #import "Collect.h"
#import "MyGems.h"

@implementation Collect

- (IBAction) unlock {

    if (lock1.hidden = NO) {

        ruby.hidden = NO;
    }
  
  • Я получаю 4 ошибки, кто-нибудь может помочь? Это кажется простым, но меня смущает.

Ответ №1:

Вы почти никогда не должны этого делать. Контроллер представления ( MyGems , который должен называться как-то так MyGemsViewController ) отвечает за управление этим представлением. Другие классы не должны входить и изменять его IBOutlets. Это вызовет у вас серьезные проблемы, когда представление, управляемое MyGems, выгружается и lock1 неожиданно становится нулевым.

Неясно, что Collect в этом случае; Я предполагаю, что это другой контроллер представления? Я не понимаю, почему unlock метод не включен MyGemsViewController .

Также обратите внимание, что этот код неверен и должен выдавать вам предупреждения о том, что он неверен:

 if (lock1.hidden = NO) {
  

Это присваивает NO lock1.hidden . Вы хотели использовать == , но вы никогда не должны проверять NO этот способ. Вы должны сделать это таким образом:

 if (! lock1.hidden) {
  

Вы должны быть осторожны при тестировании логических значений против YES и NO . Существует много истинных значений, которые не равны YES .

Комментарии:

1. amp; Я не могу сделать MyGems ViewController, потому что это приложение для навигации, забыл упомянуть.

2. MyGems — это ViewController. @interface MyGems : UIViewController Что вы имеете в виду? Вы читали руководство по программированию контроллера просмотра для iOS? developer.apple.com/library/ios/#featuredarticles /…

Ответ №2:

Вам нужно убедиться, что у вас есть ссылка на lock1 в вашем классе Collect, скорее всего, вы захотите добиться этого, указав ссылку на класс Collect в MyGems, а затем переместив эту логику представления обратно в MyGems, а не в свой класс Collect model

Комментарии:

1. Не могли бы вы опубликовать небольшой фрагмент кода о том, как это сделать? Я редко сталкиваюсь с этими проблемами. Спасибо!