RestKit ObjectLoader Неопознанный селектор пытается сопоставить объекты

Эта проблема характерна для RestKit, но я считаю, что основная проблема связана с регистрацией для получения уведомлений. Мне действительно не помешала бы помощь в выяснении этого... Кажется, у меня несколько раз возникает одна и та же проблема:

NSInvalidArguementException, исходящий от serviceDidBecomeUnavailableNotification в пределах RKClient. Действие вызывается из __NSMallocBlock__, __NSCFString, __NSCFArray, NSURL и UICFFont... очевидно, делегат установлен неправильно.

ТОЛЬКО в моих запросах используется RKObjectMapping для сопоставления ответа с классами моей модели. Я заметил, что objectLoader имеет isResponseMappable и проверяет [self.response isServiceUnavailable], а затем публикует RKServiceDidBecomeUnavailableNotification. Кажется, отсюда и моя проблема. Единственное место, где я вижу вызов isResponseMappable, это didFinishLoad:(RKResponse*)response.

Вот пример трассировки стека, я подумал, что это может быть очень полезно:

Error Message: 
NSInvalidArgumentException: -[__NSMallocBlock__ 
serviceDidBecomeUnavailableNotification:]: unrecognized selector sent 
to instance 0xee168b0 

CoreFoundation:2:in `0x37d4dacb -[NSObject doesNotRecognizeSelector:] 
+ 174' 
CoreFoundation:3:in `0x37d4c945 ___forwarding___ + 300' 
CoreFoundation:4:in `0x37ca7680 _CF_forwarding_prep_0 + 48' 
Foundation:5:in `0x31c6f50f __57-[NSNotificationCenter 
addObserver:selector:name:object:]_block_invoke_0 + 18' 
CoreFoundation:6:in `0x37d16577 ___CFXNotificationPost_block_invoke_0 
+ 70' 
CoreFoundation:7:in `0x37ca20cf _CFXNotificationPost + 1406' 
Foundation:8:in `0x31be33fb -[NSNotificationCenter 
postNotificationName:object:userInfo:] + 66' 
Foundation:9:in `0x31be4c2b -[NSNotificationCenter 
postNotificationName:object:] + 30' 
MyApp:10:in `0x000d2157 -[RKObjectLoader isResponseMappable] + 114' 
MyApp:11:in `0x000d2b83 -[RKObjectLoader didFinishLoad:] + 418' 
MyApp:12:in `0x000cb151 -[RKResponse connectionDidFinishLoading:] + 
36' 
Foundation:13:in `0x31ca6c39 __65-[NSURLConnectionInternal 
_withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 16' 
Foundation:14:in `0x31bfe6e9 -[NSURLConnectionInternalConnection 
invokeForDelegate:] + 28' 

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


person kturner    schedule 19.12.2011    source источник
comment
Какую версию RestKit вы используете? Скачать с веб-страницы или git/master?   -  person mja    schedule 20.12.2011
comment
скачать с веб-страницы (v0.9.3)   -  person kturner    schedule 20.12.2011
comment
У меня были подобные отчеты из одного из моих приложений, но проблемы исчезли, когда я обновился до github/master версии RestKit.   -  person mja    schedule 20.12.2011
comment
Спасибо, мя. Я попробую это сегодня днем. Я не решался включать ветку master, так как не знал, какие проблемы могут потенциально возникнуть из-за этого, но, возможно, это мое лучшее решение. Я обязательно дам вам знать, как это происходит!   -  person kturner    schedule 20.12.2011


Ответы (2)


Проверьте, добавили ли вы все фреймворки, рекомендованные для RestKit, в свой проект.

1. **CFNetwork.framework**
1. **CoreData.framework**
1. **MobileCoreServices.framework**
1. **SystemConfiguration.framework**
1. **libxml2.dylib**
person Nakkeeran    schedule 20.12.2011
comment
Да, определенно есть все рамки! Приложение работает как нужно с 0.9.3, если не считать этого небольшого сбоя. У меня он работал почти 2 месяца с моим последним обновлением, и это единственная проблема, которую я вижу в любом месте своего приложения. Это заставляет меня думать, что это может быть не проблема связывания, а то, как объектный загрузчик обрабатывает недопустимые ответы на сопоставление... Однако спасибо за мысль! Любые другие ОЧЕНЬ ценятся - я действительно хотел бы найти основную причину этого! - person kturner; 20.12.2011

На всякий случай, если на это решение попадут другие, я выбрал следующий подход:

Полностью удалить RestKit из существующего проекта. Затем я загрузил основную ветку RestKit, реинтегрировал ее в свой проект (было несколько устаревших методов, менее необходимых фреймворков и рефакторинговых классов, но в целом все довольно просто). Я выпущу эту версию с новым RestKit в течение следующей недели или около того, и НАДЕЮСЬ, что эта проблема больше не возникнет. :)

Если у меня возникнет эта проблема, я вернусь и изменю свой ответ, указав причину, по которой это все еще происходит.

person kturner    schedule 08.01.2012