Undefined символ для архитектуры i386 ошибка компиляции, вызванная CACurrentMediaTime()
Я делаю приложение 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 normal i386 cd/Users/Max/Developer/ImpromptuTimer setenv MACOSX_DEPLOYMENT_TARGET 10.6 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/clang -arch i386 -isysroot/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Пользователи/Max/Library/Developer/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Products/Debug-iphonesimulator -F/Пользователи/Max/Library/Developer/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Продукты/Debug-iphonesimulator файл/Пользователи/Max/Library/Разработчик/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Intermediates/ImpromptuTimer.build/Debug-iphonesimulator/ImpromptuTimer.build/Objects-normal/i386/ImpromptuTimer.LinkFileList -mmacosx-version-min = 10.6 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED = 50000 -framework UIKit -framework Foundation -framework CoreGraphics -o/Users/Max/Library/Developer/Xcode/DerivedData/ImpromptuTimer-cbcnsujnixygrxfhtvkovhnpqamb/Build/Products/Debug-iphonesim ulator/ImpromptuTimer.app/ImpromptuTimer
Undefined символы для архитектуры i386: "_CACurrentMediaTime", на который ссылаются: - [ImpromptuTimerAppDelegate applicationWillResignActive:] в ImpromptuTimerAppDelegate.o ld: символ не найден для архитектуры i386 clang: ошибка: команда компоновщика не сработала с кодом выхода 1 (используйте -v для вызова вызова)
Я думаю, что ошибка связана с не импортированием правильных фреймворков, поэтому я попытался импортировать
#import <QuartzCore/CoreAnimation.h>
в мой заголовочный файл AppDelegate, но это тоже не сработало.
Я использую CACurrentMediaTime(), потому что из того, что я прочитал, NSDate зависит от сети и, следовательно, не даст точных временных интервалов, так как последний раз использовался
Ответы
Ответ 1
Вам нужно связать 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, вам также необходимо связать его, что связано, но другое. См. Компиляция и привязка
Ответ 2
Просто добавление QuartzCore.framework решило его.