где я могу создать свой класс, чтобы получить к нему доступ через приложение? - PullRequest
0 голосов
/ 20 марта 2011

Я работал над некоторыми книгами по разработке для Цель / iOS и наткнулся на камень преткновения. У меня такое ощущение, что мне здесь чего-то не хватает, так что я уверен, что вы, ребята, можете помочь, потому что вы все такие чертовски умные :-).

У меня очень простое приложение, состоящее из 1 кнопки и 1 метки. Нажатие на кнопку помещает сообщение в метку. Я создал класс, который включает метод для создания указанного сообщения. Вот проблема:

#import "classTestViewController.h"

@implementation classTestViewController
@synthesize myLabel;

- (void)viewDidLoad
{


}

-(IBAction) pressGo:(id)sender{

    MyClass * classTester = [[MyClass alloc] init];
    classTester.count = 15;
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText;
}
- (void)dealloc
{
    [classTester release];
    [myLabel release];
    [super dealloc];
}

Выход этого приложения, на моем ярлыке, "Yay 15". Таким образом, вы можете увидеть проблему, единственный способ заставить это работать - создать экземпляр класса прямо в методе «pressGo». Это нежелательно, потому что другой метод не может получить доступ или изменить количество переменных класса. Также я получаю предупреждение, что локальное объявление classTester скрывает переменную экземпляра. Если я переместу создание экземпляра класса в метод viewDidLoad, что кажется правильным, другие методы больше не смогут получить к нему доступ.

# import "classTestViewController.h"

@implementation classTestViewController
@synthesize myLabel;

- (void)viewDidLoad
{
   MyClass * classTester = [[MyClass alloc] init];


}

-(IBAction) pressGo:(id)sender{

    classTester.count = 15;
    NSString *newText = [classTester makeString ]; 
    myLabel.text = newText;
}
- (void)dealloc
{
    [classTester release];
    [myLabel release];
    [super dealloc];
}

Результат этого - нада. Если я пытаюсь получить доступ только к одной переменной, например classTester.count, даже после ее установки, я получаю значение 0. Я также получаю предупреждение о переопределении здесь.

Итак, мой вопрос: как я могу получить доступ к этому экземпляру класса во всем приложении, а не только в одном методе? Я использую приложение на основе представления.

Ответы [ 2 ]

3 голосов
/ 20 марта 2011

Объявите classTester в файле интерфейса с помощью:

@class MyClass
@interface classTestViewController : UIViewController
{
    MyClass *classTester;
}
// Any other custom stuff here
@end

Затем создайте его экземпляр в методе viewDidLoad с помощью:

classTester = [[MyClass alloc] init];

И вы сможете получить доступ к иварулюбой метод в этом классе.Если вы хотите, чтобы он был доступен для всего вашего приложения, ссылка @Waqas укажет вам правильное направление.

2 голосов
/ 20 марта 2011

Вам необходимо создать одноэлементный класс, который создается один раз и доступен внутри всего проекта

Посмотрите

http://projectcocoa.com/2009/10/26/objective-c-singleton-class-template/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...