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

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

Восстановить пароль Регистрация
 
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
21.08.2012, 17:03     property #1
Добрый день уважаемые форумчане!
Возникла проблема со свойствами когда начал использовать 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
Посмотрите здесь:

Property Get и Property Let Странное поведение Visual Basic
Objective-C Разница между @property и объявлением переменной в классе хедера
Outlet, @property Objective-C
Objective-C Property класса
Objective-C @property (readonly)
Великие и ужасные @property Objective-C
Objective-C @property,@synthesize в Objective-C
@interface и @property Objective-C
Objective-C Зачем нужно свойство @property (assign)
Работа @property в одном классе в разных методах Objective-C
Objective-C @property или ivar
Objective-C Property и synthesize

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для 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
Ответ Создать тему
Опции темы

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