dyld: символ не найден: ошибка, как решить эту проблему - PullRequest
6 голосов
/ 14 июня 2011

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

dyld: Symbol not found: _CFXMLNodeGetInfoPtr
  Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
  Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
 in /System/Library/Frameworks/Security.framework/Versions/A/Security

Я долго работал над этим, но не смог исправить эту ошибку.

Я импортировал json.h и ASIHTTPRequest.h, все эти файлы все еще не исправили ошибку.

@implementation Websample1ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    dataWebService = [[NSMutableData data] retain];
    NSMutableURLRequest *request = [[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/customsearch/v1?key=AIzaSyDzl0Ozijg2C47iYfKgBWWkAbZE_wCJ-2U&cx=017576662512468239146:omuauf_lfve&q=lectures&callback=handleResponse"]]retain];    

    NSURLConnection *myConnection = [NSURLConnection connectionWithRequest:request delegate:self];
    [myConnection start];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{
    [dataWebService setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [dataWebService appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding];
    NSLog(@"Response: %@",responseString);
    [responseString release];
    [dataWebService release];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Error during connection: %@", [error description]);
}

//class 2
@implementation WebJson
//parse JSON
- (void)requestCompleted:(ASIHTTPRequest *)request
{
    NSString *responseString = [request responseString];   
    NSDictionary *dictionary = [responseString JSONValue];
    NSDictionary *dictionaryReturn = (NSDictionary*) [dictionary objectForKey:@"request"];    
    NSString *total = (NSString*) [dictionaryReturn objectForKey:@"totalResults"];
    NSLog(@"totalResults: %@", total); 

    NSString *search = (NSString*) [dictionaryReturn objectForKey:@"searchTerms"];
    NSLog(@"searchTerms: %@", search);       

    int count = [[dictionaryReturn objectForKey:@"count"] intValue];
    NSLog(@"count: %d", count);
}

Ответы [ 6 ]

16 голосов
/ 14 июня 2011

dyld ошибки вызваны отсутствующей или плохой библиотекой , связывающей , а не кодом.

Дважды проверьте ссылки на свои фреймворки , не стесняйтесь удалять / восстанавливать ссылки, заботясь о версии iOS, с которой вы берете свои фреймворки. (обычно используйте предоставленный список XCode, не ищите файлы)

В вашем случае я не удивлюсь, что связывание /System/Library/Frameworks/Security.framework является ошибкой, поскольку оно не похоже на принадлежность iOS SDK, если посмотреть на его путь ...

Что, я думаю, должно быть что-то вроде: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator<Version>.sdk/System/Library/Frameworks/Security.framework

5 голосов
/ 15 июня 2011

тьфу. я тоже ударил оказалось, что я случайно установил флажок, чтобы скопировать фреймворк в мой локальный каталог при добавлении фреймворка в мой проект.

удалите фреймворк из вашего проекта.

затем добавьте фреймворк, убедившись, что файлы не копируются.

1 голос
/ 13 ноября 2013

Это также происходит, когда вы ссылаетесь на библиотеку, переменную или метод, который не скомпилирован в текущей ОС, на которую вы нацелены.

Итак, проверьте символ и посмотрите, доступен ли он. Например, CFRelease(CFTypeRef cf) доступен во всех платформах iOS, но CFAutorelease(CFTypeRef arg) доступен только в iOS 7.0 (и Mac OSX 10.9) и выше, обозначенных CF_AVAILABLE(10_9, 7_0)

0 голосов
/ 01 октября 2014

Измените цель развертывания на iOS 8.1.

0 голосов
/ 18 июля 2014

У меня также была эта проблема, и, похоже, это известная ошибка в CFNetwork в iOS 8 SDK (смотрите здесь: https://devforums.apple.com/message/971238#971238).

Обходной путь выглядит следующим образом:

Измените порядок ссылок в "Link Binary With Libraries" вашей цели и поместите Foundation.framework перед CFNetwork.framework.

Это решило проблемы для меня.

0 голосов
/ 26 июня 2011

Я получил ту же ошибку, когда изменил суффикс, который использует мой исполняемый файл при загрузке фреймворков с суффикса 'no' на суффикс 'debug'. Я думаю, что отладочные фреймворки не обновляются Apple.

Вы можете получить немного, если вы используете 'debug' по другим причинам, а затем добавьте фреймворк, чья версия отладки устарела.

Как и в XCode 3, настройка суффикса доступна на панели «Общие» окна «Информация» вашего исполняемого файла.

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