Неопределенный символ для архитектуры ошибка компиляции i386, вызванная CACurrentMediaTime () - PullRequest
15 голосов
/ 18 декабря 2011

Я делаю приложение для iOS, отображающее таймер.Я не думаю, что смогу оставить таймер включенным после того, как пользователь нажмет кнопку «Домой», поэтому я хочу записать время, когда пользователь выходит из приложения, и использовать время, когда он повторно входит в приложение, чтобы обновить таймер.Вот код, который я попробовал:

- (void)applicationWillResignActive:(UIApplication *)application
{
    double currentTime = CACurrentMediaTime(); 
    NSLog(@"%g", currentTime);
    /*
     Sent when the application is about to move from active to inactive state. This can     occur for certain types of temporary interruptions (such as an incoming phone call or SMS     message) or when the user quits the application and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
     */
}

(если я закомментирую тело метода applicationWillResignActive, оно будет прекрасно работать)

Это ошибка, которую я получаю при компиляции

Ld /Users/Max/Library/Developer/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Products/Debug-iphonesimulator/ImpromptuTimer.app/ImpromptuTimer нормальный i386 кд / Пользователи / Max / Разработчик / ImpromptuTimer SETENV MACOSX_DEPLOYMENT_TARGET 10,6 SetEnvPATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Developer/Platforms/iPhoneSimulator.platform/Developer/ usr / bin / clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L / Пользователи / Макс / Библиотека / Разработчик / Xcode / DerivedData / ImpromptuTimer-cbcnsildjmbkovhvvvvvvvvПродукты / Debug-iphonesimulator -F / Пользователи / Max / Библиотека / Разработчик / Xcode / DerivedData / ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb / Сборка / Продукты / Debug-iphonэсимулятормин = 10,6 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-дуга -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED = 50000 -framework UIKit -framework Фундаментные -framework CoreGraphics -о / Пользователи / Max / Library / Developer / Xcode / DerivedData / ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb /Build / Products / Debug-iphonesimulator / ImpromptuTimer.app / ImpromptuTimer

Неопределенные символы для архитектуры i386: «_CACurrentMediaTime», ссылка на которую указана из: - [ImpromptuTimerAppDelegate applicationWillResignActive:] в значении Improm: не найден)для архитектуры i386 clang: ошибка: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)

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

#import <QuartzCore/CoreAnimation.h>

в мой заголовочный файл AppDelegate, но это тоже не сработало.

Я использую CACurrentMediaTime (), потому что из того, что я прочитал,NSDate зависит от сети и, следовательно, не даст точных временных интервалов с момента последнего использования

Ответы [ 2 ]

31 голосов
/ 18 декабря 2011

Вам необходимо связать QuartzCore.framework. Вот откуда приходит CACurrentMediaTime: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/CoreAnimation_functions/Reference/reference.html

См. Этот документ о том, как добавить фреймворки: https://developer.apple.com/library/ios/#recipes/xcode_help-project_editor/Articles/AddingaLibrarytoaTarget.html#//apple_ref/doc/uid/TP40010155-CH17-SW1

edit: для уточнения, хотя вы и правы в том, что вам нужно включить / импортировать QuartzCore, вам также нужно ссылаться на него, который связан, но отличается. См. Компиляция и связывание

4 голосов
/ 12 декабря 2013

Простое добавление QuartzCore.framework решило эту проблему.

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