2016-02-11 1 views
2

У меня есть пользовательский класс, который наследует от UILocalNotification, он имеет Store свойств объекта (класс, который наследует от NSObject):«непризнанный селектор послал к экземпляру» собственность сеттер

customLocalNotification.h:

@property (strong,nonatomic) Store *store;

Но когда я пытаюсь установить «Сохранить» объект в viewController, как это:

customLocalNotification *notification=[[customLocalNotification alloc] init]; 
notification.store=store; //Crashes here 

Edit: Я буду использовать userInfo словарь, чтобы сохранить мой Store объект, но когда я пытаюсь сделать это он падает с этим сообщением об ошибке:

2016-02-11 15:55:26.132 App[13861:3606796] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unable to serialize userInfo: Error Domain=NSCocoaErrorDomain Code=3851 "Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType')" UserInfo={NSDebugDescription=Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType')}' 
*** First throw call stack: 
(
0 CoreFoundation      0x000000010c196e65 __exceptionPreprocess + 165 
1 libobjc.A.dylib      0x000000010bc0fdeb objc_exception_throw + 48 
2 UIKit        0x000000010cbd5ba5 -[UIConcreteLocalNotification userInfo] + 0 
3 App       0x00000001088cb65b -[monitorLocationViewController createNotificationWithStore:andArounders:] + 683 
4 App       0x00000001088cb1ed -[monitorLocationViewController sendNotificationIfNeededForStore:] + 397 
5 App       0x00000001088cb021 -[monitorLocationViewController locationManager:didEnterRegion:] + 145 
6 App       0x00000001088cae9c __68-[monitorLocationViewController locationManager:didUpdateLocations:]_block_invoke + 284 
7 CoreFoundation      0x000000010c0f59ff __51-[__NSSetM enumerateObjectsWithOptions:usingBlock:]_block_invoke + 79 
8 CoreFoundation      0x000000010c0f590a -[__NSSetM enumerateObjectsWithOptions:usingBlock:] + 202 
9 App       0x00000001088cad02 -[monitorLocationViewController locationManager:didUpdateLocations:] + 402 
10 CoreLocation      0x000000010a8c5177 CLClientGetCapabilities + 20882 
11 CoreLocation      0x000000010a8c15d3 CLClientGetCapabilities + 5614 
12 CoreLocation      0x000000010a8bc0cd CLClientInvalidate + 923 
13 CoreFoundation      0x000000010c0c2a1c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 
14 CoreFoundation      0x000000010c0b86a5 __CFRunLoopDoBlocks + 341 
15 CoreFoundation      0x000000010c0b7e02 __CFRunLoopRun + 850 
16 CoreFoundation      0x000000010c0b7828 CFRunLoopRunSpecific + 488 
17 GraphicsServices     0x000000010ed92ad2 GSEventRunModal + 161 
18 UIKit        0x000000010c543610 UIApplicationMain + 171 
19 App       0x00000001088dedef main + 111 
20 libdyld.dylib      0x000000010dbbe92d start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Кто-нибудь знает, почему происходит сбой?

Спасибо!

+0

Как-то вы не получаете свой подкласс 'UILocalNotification'. Как выглядит ваш метод 'init'? – Avi

+0

В стороне, вероятно, имеет смысл хранить дополнительные свойства каким-либо другим способом. Объекты «UILocalNotification» передаются в iOS, и ваши пользовательские классы, вероятно, не переживают переход. – Avi

+0

@Avi Я не переопределяю 'init' на' customLocalNotification', поэтому я думаю, что это значение по умолчанию. –

ответ

1

UILocalNotifications предназначено для хранения легких данных. То есть userInfo может содержать только property list encodable. И я бы добавил, что все это не предназначено для того, чтобы бросать тяжелые предметы, но просто передавайте некоторую контекстуальную информацию вокруг того, что вам нужно обрабатывать уведомление, когда оно поступит (например, некоторые идентификаторы, число и т. Д.).

+0

Как передать объект, например, объект 'Store' (пользовательский класс с несколькими свойствами) через' UILocalNotification'? (Мне нужно знать, в какой магазин отправлено уведомление). –

+0

Кодируйте свой магазин в NSDictionary и разворачивайте его при поступлении уведомления. Конечно, весь процесс имеет смысл только в том случае, если объект Store не подключен к какой-либо другой части приложения таким образом, который не может быть легко восстановлен. – Eiko

+0

Объект 'Store' в объект' NSDictionary' в объект словаря 'userInfo'? –

0

Я согласен с Eiko. Вы можете добавить произвольные пары ключ-значение в этот словарь. Однако ключи и значения должны быть действительными типами списка свойств; если таковые отсутствуют, возникает исключение. проверка ниже двух ссылок UILocalNotification Valid Property list types

Чтобы решить проблему, вы можете попробовать это 1) Создание NSDictionary для вашего объекта магазин со всеми свойствами, как пары ключ-значение, которые вы хотите передать с UILocalNotification 2) набор словарь словаря слова пользователя слова
3) разобрать и загрузить новый словарь и создать объект Store, в котором вы хотите его использовать.

+0

Есть ли какой-либо вариант, я могу получить исходный объект? –

+0

У вас может быть уникальное ключевое свойство в классе Store. просто передайте этот ключ как строку с UILocalNotification и выберете объект Store с помощью этого ключа. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^