IPhone: при добавлении категории в CoreLocation возникла ошибка ссылки. Зачем? - PullRequest
0 голосов
/ 05 февраля 2010

Я добавил категорию в CLLocation в CoreLocation, но продолжал получать ошибку ссылки.
Я обыскиваю и пробую процесс ПОПРОБОВАТЬ И БЫТЬ ЧЕРТЫ Я исправил проблему, добавив CoreLocation для других флагов компоновщика
Но не знаете почему?
Я предполагаю, что это как-то связано с существом CoreLocation и внешней структурой.

Код: CLLocation + DistanceComparison.h

#import < Foundation/Foundation.h >
#import < CoreLocation/CoreLocation.h >

static CLLocation * referenceLocation;
@interface CLLocation (DistanceComparison)
- (NSComparisonResult) compareToLocation:(CLLocation *)other;
@end

CLLocation + DistanceComparison.m

#import "CLLocation+DistanceComparison.h"
#import <CoreLocation/CoreLocation.h>
@implementation CLLocation (DistanceComparison)
- (NSComparisonResult) compareToLocation:(CLLocation *)other {
    CLLocationDistance thisDistance = [self getDistanceFrom:referenceLocation];
    CLLocationDistance thatDistance = [other getDistanceFrom:referenceLocation];
    if (thisDistance < thatDistance) { return NSOrderedAscending; }
    if (thisDistance > thatDistance) { return NSOrderedDescending; }
     return NSOrderedSame;
    }
@end

Ошибка сборки:

 Ld build/Debug-iphonesimulator/SortedLocations.app/SortedLocations normal i386  
 cd /Users/clearbrian/Documents/Development/IPhoneDevelopment/034.SortedLocations/SortedLocations  
 setenv MACOSX_DEPLOYMENT_TARGET 10.5  
 setenv PATH   "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"  
 /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot   /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk -L/Users/clearbrian/Documents/Development/IPhoneDevelopment/034.SortedLocations/SortedLocations/build/Debug-iphonesimulator -F/Users/clearbrian/Documents/Development/IPhoneDevelopment/034.SortedLocations/SortedLocations/build/Debug-iphonesimulator -filelist /Users/clearbrian/Documents/Development/IPhoneDevelopment/034.SortedLocations/SortedLocations/build/SortedLocations.build/Debug-iphonesimulator/SortedLocations.build/Objects-normal/i386/SortedLocations.LinkFileList -mmacosx-version-min=10.5 -framework Foundation -framework UIKit -framework CoreGraphics -o /Users/clearbrian/Documents/Development/IPhoneDevelopment/034.SortedLocations/SortedLocations/build/Debug-iphonesimulator/SortedLocations.app/SortedLocations  

 Undefined symbols:  
 ".objc_class_name_CLLocation", referenced from:  
 literal-pointer@__OBJC@__cls_refs@CLLocation in RootViewController.o  
 ld: symbol(s) not found  
 collect2: ld returned 1 exit status  

Ошибка ссылки при добавлении категории
может потому что его внешние рамки

получил помощь от
рт клон https://traillocation.googlecode.com/hg/ след
Они добавили основание в другие флаги линкера для одной из своих целей
поэтому я попытался добавить CoreLocation см. попытку 2

ПОПЫТКА 1: не сработало - см. Попытку 2

ПРИМЕЧАНИЕ: чтобы использовать эту категорию на устройстве 3.0, флаг компоновщика -all_load
должен быть установлен в пользователях этой библиотеки из-за ошибки инструментария.
См. Категории в статической библиотеке для устройства iPhone 3.0

Щелкните правой кнопкой мыши имя проекта на панели «Группы и файлы»
Получить информацию
Вкладка «Сборка»
введите другие флаги компоновщика в поиске
когда найдено
Двойной клик в правом столбце
add -all_load

ПОПЫТКА 2 -
Щелкните правой кнопкой мыши имя проекта в панели «Группы и файлы»
Получить информацию
Вкладка построения
введите другие флаги компоновщика в поиске
когда найдено
Двойной клик в правом столбце
add -framework CoreLocation
близко
если вы снова откроете параметры в двух строках, это нормально
-framework
CoreLocation
Очистите все цели
Построить
казалось, работает

1 Ответ

1 голос
/ 05 февраля 2010

Скорее всего, вы не включили инфраструктуру CoreLocation в фазу "Связать бинарный файл с библиотеками" вашей цели. Для этого дважды щелкните по своей цели, перейдите на первую вкладку, нажмите кнопку + в левом нижнем углу, найдите в списке инфраструктуру CoreLocation и нажмите «Добавить».

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