Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неправильный доступ к объектам? 
:(
    Опции темы
Dimanoss
  Дата 3.9.2013, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



В проекте есть класс Singleton , по задумке в нём должны лежать переменные, используемые разными классами.  И вот что получается.  Если обращаюсь из класса А, что-либо сохраняю, потом так же нормально читаю.  Если же сохраняю классом А, а читать пытаюсь классом Б, получаю какую-то фигню. Например: NSPoint: {653, 72} или <CABasicAnimation: 0x71c0e40> .

Если я правильно понимаю - каждый класс создаёт-таки свой экземпляр Singleton?  Отсюда все безобразия?
PM MAIL   Вверх
Bitter
Дата 3.9.2013, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Нет, синглтон на то и синглтон чтобы он создавался один единственный раз и использовался всеми. Читайте паттерны, хотя бы в википедии.
PM MAIL ICQ Skype   Вверх
Dimanoss
  Дата 4.9.2013, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



тогда в чём дело?  Неправильное объявление синлтона?  у меня сейчас так выглядит:

Код

static MySingleton *sMySingleton = nil;

+(MySingleton *) sharedInstance
{
    @synchronized(self)
    {
        if (sMySingleton == nil) sMySingleton = [NSAllocateObject([self class], 0, NULL) init];        
    }
    return sMySingleton;
}

PM MAIL   Вверх
Bitter
Дата 4.9.2013, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



объявление выглядит вполне нормально, а в чем дело, так это знает только ХКод
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 4.9.2013, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



проблемы возникают при вызове

Код

[[MySingleton sharedInstance] testAllVars]; 


тут я получаю или белиберду, или крэш (EXC_BAD_ACCESS code=1).  Функция testAllVars безобидная, всего лишь в логи выводит все нужные переменные.  Причём проблемы возникают не при первом вызове, т.е. - первый раз всё нормально проходит...
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



ну видимо все ваши нужные переменные и приводят к крэшу
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 5.9.2013, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



уверен, переменные в полном порядке.  Первый раз же нормально всё, после первого обращения все переменные так в синглтоне и остаются...
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Трудно что либо сказать по вашему вопросу, я ж не телепат. Бывает что BAD_ACCESS вызван обращением к удаленному из памяти объекту (то есть к зомби). Попробуйте включить зомби в проекте и посмотрите что выводится в консоли при крэше
На картинке обратите внимание на галочку
user posted image
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 5.9.2013, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



-[CFString respondsToSelector:]: message sent to deallocated instance 0x2d6b7ff0
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



это значит, что вы используете строку которая удалилась из памяти
Вы используете ARC?
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 5.9.2013, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Цитата(Bitter @ 5.9.2013,  14:06)
Вы используете ARC?

никак нет-с.  Постойте, на то ведь он и Синглтон, чтобы не удаляться....
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



если вы не используете ARC, то вы безнадежно отстали. Вы не используете сторибоарды, вы не используете ARC, скажите еще что вы под DOS пишете.
Еще раз - удаляется не синглтон, а какая-то переменная типа NSString. Какая это только вам известно. Ищите где у вас работа со строками, как вы их храните и тд
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 5.9.2013, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



Цитата(Bitter @ 5.9.2013,  14:56)
...вы безнадежно отстали. Вы не используете сторибоарды, вы не используете ARC...

Не, ну, конечно, мне бы застрелиться нужно, но это проблемы не решит.  Я уже как-то оправдывался, почему я все последние причиндалы не использую.  Ну вот сложилось так, последующие проекты (если будут) по другому буду делать.

Добавлено через 5 минут и 52 секунды
Цитата(Bitter @ 5.9.2013,  14:56)
Еще раз - удаляется не синглтон, а какая-то переменная типа NSString. Какая это только вам известно. Ищите где у вас работа со строками, как вы их храните и тд

Просто в классе Singleton объявлена переменная 
Код

@property (nonatomic, strong) NSString* userName;
, к ней же и пытаюсь обратиться.  Нигде в коде попыток развоплотить её не предпринимаю, так что даже и не знаю, где собака порылась.   На двадцатый раз перерываю код, и ничего в голову не приходит...
PM MAIL   Вверх
Bitter
Дата 5.9.2013, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



как вы инициализируете эту переменную?
PM MAIL ICQ Skype   Вверх
Dimanoss
Дата 5.9.2013, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 14.10.2010

Репутация: нет
Всего: нет



пробовал и через сеттер, и напрямую.   Даже self->userName вспомнил.  Устанавливается-то она нормально, но после того, как другой ViewCotroller загружается, всё как-то тазиком прикрывается
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.1253 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.