Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
#1

property - Программирование iOS

21.08.2012, 17:03. Просмотров 789. Ответов 2
Метки нет (Все метки)

Добрый день уважаемые форумчане!
Возникла проблема со свойствами когда начал использовать NSMutableArray;

Objective-C
1
2
3
4
5
6
@interface ViewController : UIViewController <UIActionSheetDelegate, UIAlertViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource>
 
...
@property (strong, nonatomic) NSMutableArray  * varDay;
...
@end
В ViewController синтезировал его.

Objective-C
1
2
3
4
5
6
7
8
@interface ViewController ()
 
@end
 
@implementation ViewController
@synthesize varDay;
.....
@end
Далее в viewDidLoad пытаюсь записать в него объекты с помощью сообщения addObject

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    
    for(int i = 1; i <= 30; i++)
        {
            [self.varDay addObject:[[NSString alloc]initWithFormat:@"%d", i]];
        }
 
    NSLog(@"day = %@", varDay);
}
На консоле выводит day = (null). Нечего не записалось. Можите объснять в чем проблемма?
Может быть я память не выделил для массива?

Проблемму можно решить таким образом.

Objective-C
1
2
3
4
5
6
7
8
    NSMutableArray * _varDay = [[NSMutableArray alloc]init];
    for(int i = 1; i <= 30; i++)
        {
            [_varDay addObject:[[NSString alloc]initWithFormat:@"%d", i]];
        }
 
    self.varDay = _varDay;
    NSLog(@"day = %@", varDay);
Сдесь я выделяю память для указателя _varDay типа NSMutableArray. После операций с ним я присваиваю это значение self.varDay, как раз моему свойству.

Можно ли решить проблему не объявляю новый массив, а работать со свойством и нормально посылать ему сообщения @property (strong, nonatomic) NSMutableArray * varDay; ?

Дело в том что если я потом пошлю сообщение [_varDay removeAllObjects]; то объекты все удаляться у меня из свойства varDay.

Подскажите подскажите пожалуйста наиболее оптимальный вариант, а то второй вариант не безопастный
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 17:03     property
Посмотрите здесь:

@interface и @property - Objective-C
Здравствуйте! Объясните пожалуйста, вот я накатал класс: @interface Good : NSObject { int c; } @property int a; ...

Outlet, @property - Objective-C
Добрый день, встал вопрос: почему при декларации оутлета добавляется только @property: @interface MainViewController :...

Property класса - Objective-C
Всем доброго дня! Я только начал изучать Objective C по этому прошу сильно не ругать, а как можно более подробно объяснить ответ на...

Property и synthesize - Objective-C
Доброго времени суток! Недавно начал изучать Objective-C, и столкнулся с проблемой при решении задачи. Вообщем сама проблема....

@property (readonly) - Objective-C
Добрый вечер, Решил немного поизучать obj-c. Пока не очень привычно Вопрос такой: мутаторы assign, retain, copy влияют только на...

Великие и ужасные @property - Objective-C
Всем привет! Уже второй месяц изучаю разработку под iOS, но все откладывал этот вопрос на потом - т.к., мол, &quot;пока и так работает,...

@property или ivar - Objective-C
Добрый день! Занимаюсь Objective C недавно, и, до сегодняшнего времени, не задавался вышеупомянутым вопросом. В учебниках и статьях...

Зачем нужно свойство @property (assign) - Objective-C
Для чего нужно свойство property (assign)? Как мне обратиться к полю класса, если оно под @property? Что будет, если убрать его? Я так...

Работа @property в одном классе в разных методах - Objective-C
Пишу application osx под mac, а на е под ios. Не получается передать значения между методами о_О сам в шоке. //.h @property...

Разница между @property и объявлением переменной в классе хедера - Objective-C
В чем собственно разница между обьявлением переменной в теле класса в хедере, и использовании @property и @synthesize?

Property Get и Property Let Странное поведение - Visual Basic
Здравствуйте, Господа. Сразу к делу. Написал UserControl, объявил в нём весьма безобидные свойства: Dim FDisplayedField As String ...

Property - Delphi
Вот вроде разобрался с классами, а тут вот одна мелочь осталась, ее функциональное назначение понятно, а вот немного синтаксис хромает,...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
22.08.2012, 12:58     property #2
Цитата Сообщение от Death Посмотреть сообщение
@synthesize varDay;
=> @synthesize varDay = _varDay; // используйте daysArray, varDay - очень плохо. Здесь идет "привязка" к instance переменной _varDay
Затем, к примеру в init методе вашего метода, вызывайте _varDay = [[NSMutableArray alloc] init];
а потом внутри контроллера он может быть виден как _varDay, вне его - это будет <instanceName>.varDay, ибо вы объявили property в интерфейсе.

P.S.
В данном случае Вам вообще лишний массив не нужен. self.varDay = [[NSMutableArray alloc] init];
И все. Проблем нет. Или как я объяснил выше.
Цитата Сообщение от Death Посмотреть сообщение
Дело в том что если я потом пошлю сообщение [_varDay removeAllObjects]; то объекты все удаляться у меня из свойства varDay.
А вы что хотели? Указатели указывают на один и тот же объект.

Добавлено через 3 минуты
Цитата Сообщение от Death Посмотреть сообщение
Дело в том что если я потом пошлю сообщение [_varDay removeAllObjects]; то объекты все удаляться у меня из свойства varDay.
Цитата Сообщение от Death Посмотреть сообщение
На консоле выводит day = (null). Нечего не записалось. Можите объснять в чем проблемма?
Может быть я память не выделил для массива?
Вы не создали объект впринципе.
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
22.08.2012, 14:49  [ТС]     property #3
Так, по порядку.
1). Т,е когда я работаю через свойства, у меня не создается объект, а всего лишь определяться какой будет к нему доступ так?
2.) Если я объявил такие типы как NSDictionary, NSString, NSArray и т.д в свойство, я в люблю случае должен для них создать объект например. [NSArray alloc]init];


Цитата Сообщение от zulkis Посмотреть сообщение
В данном случае Вам вообще лишний массив не нужен. self.varDay = [[NSMutableArray alloc] init];
И все. Проблем нет. Или как я объяснил выше.
Я тоже на утро об этом подумал.

Благодарю за помощь
Yandex
Объявления
22.08.2012, 14:49     property
Ответ Создать тему
Опции темы

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