Неопределенный символ в OSX, но стандартные методы Apple? - PullRequest
0 голосов
/ 16 сентября 2011

Я довольно новичок в программировании OSX или в использовании ObjC.В прошлом я немного работал над C en C ++, в основном в сочетании с VTK.Я пытаюсь скомпилировать очень простую программу, где я скопировал метод init из демонстрационного кода Apple.Я почти уверен, что что-то забыл.Мой проект является приложением Какао по умолчанию, и я создал класс MyRoster, который по какой-то причине вызывает проблемы со связыванием.Вывод во время компиляции следующий (если кому-то нужно больше, просто скажите так):

Ld /Users/mark/Library/Developer/Xcode/DerivedData/Rooster-giqzgxqladmwyjepkqehtzkmuvyd/Build/Products/Debug/Rooster.app/Contents/MacOS/Rooster normal x86_64
cd /Users/mark/Documents/Programming/Rooster
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/mark/Library/Developer/Xcode/DerivedData/Rooster-giqzgxqladmwyjepkqehtzkmuvyd/Build/Products/Debug -F/Users/mark/Library/Developer/Xcode/DerivedData/Rooster-giqzgxqladmwyjepkqehtzkmuvyd/Build/Products/Debug -filelist /Users/mark/Library/Developer/Xcode/DerivedData/Rooster-giqzgxqladmwyjepkqehtzkmuvyd/Build/Intermediates/Rooster.build/Debug/Rooster.build/Objects-normal/x86_64/Rooster.LinkFileList -mmacosx-version-min=10.7 -framework Cocoa -o /Users/mark/Library/Developer/Xcode/DerivedData/Rooster-giqzgxqladmwyjepkqehtzkmuvyd/Build/Products/Debug/Rooster.app/Contents/MacOS/Rooster

Undefined symbols for architecture x86_64:
"_CalEventsChangedNotification", referenced from:
  -[MyTasksCalendar init] in MyTasksCalendar.o
"_CalEventsChangedExternallyNotification", referenced from:
  -[MyTasksCalendar init] in MyTasksCalendar.o
"_OBJC_CLASS_$_CalCalendarStore", referenced from:
  objc-class-ref in MyTasksCalendar.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

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

- (id)init
{
    self = [super init];
    if (self) {
        // Add the receiver as an observer of Calendar Store notifications
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventsChanged:) name:CalEventsChangedExternallyNotification object:[CalCalendarStore defaultCalendarStore]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventsChanged:) name:CalEventsChangedNotification object:[CalCalendarStore defaultCalendarStore]];

    // Create a predicate to use to fetch the events
    NSInteger year = [[NSCalendarDate date] yearOfCommonEra];
    startDate = [[NSCalendarDate dateWithYear:year month:1 day:1 hour:0 minute:0 second:0 timeZone:nil] retain]; 
    endDate = [[NSCalendarDate dateWithYear:year month:12 day:31 hour:23 minute:59 second:59 timeZone:nil] retain]; 
    NSPredicate *eventsForThisYear = [NSPredicate eventPredicateWithStartDate:startDate endDate:endDate calendars:[[CalCalendarStore defaultCalendarStore] calendars]];

    // Fetch all events for the current year
    events = [[NSMutableArray array] retain];
    [self addEventArray:[[CalCalendarStore defaultCalendarStore] eventsWithPredicate:eventsForThisYear]];
    }
    return self;
}

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

Большое спасибо,

Mark

1 Ответ

1 голос
/ 16 сентября 2011

Похоже, вам не хватает инфраструктуры CalendarStore из вашего проекта - попробуйте добавить /System/Library/Frameworks/CalendarStore.framework в ваш проект.

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