Обратная совместимость при использовании Core Data - PullRequest
0 голосов
/ 26 мая 2010

Может ли кто-нибудь пролить свет на то, почему происходит сбой моего приложения со следующей ошибкой на iPhone OS 2.2.1

dyld: Symbol not found: _OBJC_CLASS_$_NSPredicate
  Referenced from: /var/mobile/Applications/456F243F-468A-4969-9BB7-A4DF993AE89C/AppName.app/AppName
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation

У меня слабая связанная CoreData.framework, и для Base SDK установлено значение 3.0, а для параметра Deployment Target установлено значение SDK 2.2

Приложение уже использует другие функции 3.0, когда они доступны, и у меня не было никаких проблем с ними. Но, очевидно, методы обратной совместимости, используемые для других функций, не работают с Core Data.

Приложение вылетает до вызова приложения applicationDidFinishLaunching делегата приложения.

Вот журнал отладчика:

[Session started at 2010-05-25 20:17:03 -0400.]
GNU gdb 6.3.50-20050815 (Apple version gdb-1119) (Thu May 14 05:35:37 UTC 2009)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i386-apple-darwin --target=arm-apple-darwin".tty /dev/ttys001
Loading program into debugger…
sharedlibrary apply-load-rules all
warning: Unable to read symbols from "MessageUI" (not yet mapped into memory).
warning: Unable to read symbols from "CoreData" (not yet mapped into memory).
Program loaded.
target remote-mobile /tmp/.XcodeGDBRemote-12038-42
Switching to remote-macosx protocol
mem 0x1000 0x3fffffff cache
mem 0x40000000 0xffffffff none
mem 0x00000000 0x0fff none
run
Running…
[Switching to thread 10755]
[Switching to thread 10755]
Re-enabling shared library breakpoint 1
Re-enabling shared library breakpoint 2
Re-enabling shared library breakpoint 3
Re-enabling shared library breakpoint 4
Re-enabling shared library breakpoint 5
(gdb) continue
warning: Unable to read symbols for ""/Users/alex/iPhone Projects/AppName/build/Debug-iphoneos"/AppName.app/AppName" (file not found).
dyld: Symbol not found: _OBJC_CLASS_$_NSPredicate
  Referenced from: /var/mobile/Applications/456F243F-468A-4969-9BB7-A4DF993AE89C/AppName.app/AppName
  Expected in: /System/Library/Frameworks/Foundation.framework/Foundation

(gdb) 

Ответы [ 2 ]

1 голос
/ 27 мая 2010

Очевидно, что вы не можете ссылаться на NSPredicate символом литерального класса, если не хотите иметь обратную совместимость с iPhone OS 2.2

Поэтому я изменил мою ссылку на NSPredicate на:

[fetchRequest setPredicate:[NSClassFromString(@"NSPredicate") predicateWithFormat:@"EntryId == %@", [NSNumber numberWithInt: index]]];

и теперь это работает.

См. https://devforums.apple.com/message/225591#225591

0 голосов
/ 26 мая 2010

Извините, просто перечитайте ваш вопрос .. Похоже, что сама структура не может быть слабо связана. Я предполагаю, что это означает, что вы не можете иметь цель 2.x с платформой Core Data: (

т.е. вся платформа недоступна на целевой платформе, и слабое связывание не применяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...