Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
#1

Создание класса, хранящего переменные всего проекта - Objective-C

03.01.2012, 16:07. Просмотров 1947. Ответов 7
Метки нет (Все метки)

Здравствуйте! Хочу создать класс, чтоб в нём хранились переменные всего проекта. И читать их и менять значения из других классов. Типа как статические переменные, только не для чтения, а для записи. Как такое осуществить?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2012, 16:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создание класса, хранящего переменные всего проекта (Objective-C):

Создание списка, хранящего объекты класса
Помогите, пожалуйста, придумать реализацию связного списка, который хранил бы в...

Переменные для всего проекта
Делаю приложение на основе БД! Несколько форм этого приложения работают с...

Глобальные переменные для всего проекта
У меня есть проект, в нем несколько питоновских файлов. Есть питоновский файл,...

Построить описание класса, хранящего информацию о человеке
Доброго времени суток! Помогите, пожалуйста, построить описание класса,...

Переменные экземпляра, класса, константы и переменные readonly
Как эту задачу записать в C#? Переменные экземпляра, класса, константы и...

Создание контейнера (вектора), хранящего вектора разной размерности
Можно ли в матлабе создать вектор, который будет хранить вектора разной...

7
Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
03.01.2012, 16:23 #2
Objective-C
1
2
3
4
5
6
7
8
@interface MyVars : NSObject {
 
int ai, bi, ci;
float af, bf, cf;
 
}
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
@class MyVars;
 
@inteface MyClass : NSObject {
MyVars *myVars;
}
 
@property MyVars *myVars;
 
@end
Так?
1
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
03.01.2012, 23:05  [ТС] #3
Но получается, если поменять эти переменные, находясь в любом классе, нужно создавать экземпляр класса MyClass и они поменяются только в экземпляре. А нужно, находясь в любом месте поменять их , а потом из любого места получить новые значения.
0
norge_goth
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
04.01.2012, 01:15 #4
Цитата Сообщение от andrei0077 Посмотреть сообщение
Но получается, если поменять эти переменные, находясь в любом классе, нужно создавать экземпляр класса MyClass и они поменяются только в экземпляре. А нужно, находясь в любом месте поменять их , а потом из любого места получить новые значения.
Классическое применение синглтона: http://ru.wikipedia.org/wiki/Одиночк...B0_Objective-C

Один объект на всю программу
2
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
04.01.2012, 02:11  [ТС] #5
Objective-C
1
2
3
4
5
//h
@interface StaticData : NSObject
+ (StaticData*)staticData;
 
@property (readwrite , copy) NSString *string;
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//m
 
#import "StaticData.h"
 
implementation StaticData
 
@synthesize string;
 
static StaticData *staticDataInstance = nil;
 
+ (StaticData *)staticData
{
    @synchronized(self) {
        static dispatch_once_t pred;
        dispatch_once(&pred, ^{ staticDataInstance = [[self alloc] init]; });
    
    
    }
    
    return staticDataInstance;
}
Вроде всё правильно сделал но когда пытаюсь задать имя переменной из вне [[StaticData staticData] string] = @"new string name"; возникает ошибка error: assigning to 'readonly' return result of an objective-c message not allowed
0
norge_goth
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
05.01.2012, 01:56 #6
Вроде всё правильно сделал но когда пытаюсь задать имя переменной из вне [[StaticData staticData] string] = @"new string name"; возникает ошибка error: assigning to 'readonly' return result of an objective-c message not allowed
@property (readwrite , copy) NSString *string; это не переменная - это пропертя, то есть это только сеттер/геттер и не больше, тут возникает вопрос - к чему будет обращаться пропертя?
Ответ в наведенном примере не к чему..

я бы сделал так:
Objective-C
1
2
3
4
5
6
7
8
@interface StaticData : NSObject
{
    NSString * _string; 
}
@property (copy) NSString * string; 
 
+ (StaticData*)sharedStaticData;
+ (void)sharedStaticDataRemover;
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#import "StaticData.h"
 
implementation StaticData
 
@synthesize string = _string;
 
static StaticData *staticDataInstance = nil;
 
+ (StaticData *)sharedStaticData
{
    if (!staticDataInstance)
        staticDataInstance = [StaticData new];
    
    return staticDataInstance;
}
 
+ (void)sharedStaticDataRemover
{
    [staticDataInstance release];
}
 
-(void)dealloc
{
    [_string release];
    [super dealloc];
}
1
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
05.01.2012, 20:33  [ТС] #7
Спасибо, прояснили тему. Последний вопрос, как теперь из других классов теперь эту переменную поменять? Я пытаюсь, он пишет, что она не обнаружена.
0
norge_goth
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
06.01.2012, 02:08 #8
Спасибо, прояснили тему. Последний вопрос, как теперь из других классов теперь эту переменную поменять? Я пытаюсь, он пишет, что она не обнаружена.
подключить хэдер #import "StaticData.h" сделать:
Objective-C
1
2
StaticData * sharedData = [StaticData sharedStaticData];
sharedData.string = @"Some new string";
1
06.01.2012, 02:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2012, 02:08
Привет! Вот еще темы с решениями:

Как при создании экземпляра класса инициализировать переменные вложенного класса
Здравствуйте. Подскажите пожалуйста как при создании екземпляра класа...

С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса
#include "stdafx.h" #include "iostream" #include "math.h" using namespace...

Реализация работы с классами, конструктор, методы класса и переменные класса
Всем привет, решил изучать Java. Нашел прикольное задание : Реализовать...

метод абстрактного класса не видит переменные дочернего класса
есть abstract class A{ protected static $dir; public static function f(){} ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru