【发布时间】:2014-09-12 02:26:05
【问题描述】:
我是 iOs 开发的初学者。我搜索了几个小时并尝试了很多东西,但仍然无法正常工作。我很孤独。
我有一个项目,其中包含 2 个故事板(iPhone + iPad)和 3 对文件 .h/.m(AppDelgate、MasterViewController、DetailViewController)。
我在我的 AppDelegate.m 中下载了我需要的所有内容,并希望将结果存储在我的 AppDelegate.h 中声明的全局常量中,如下所示:
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
//javascript & css files
extern NSData *const JQUERY_FILE;
extern NSData *const JQUERYUI_FILE;
extern NSData *const JQUERY_MOBILE_FILE;
extern NSData *const JQUERY_MOBILE_CSS_FILE;
extern NSData *const APPLICATION_FILE;
extern NSData *const FEED_FILE;
@end
在 AppDelegate.m 中:
#import "AppDelegate.h"
@implementation AppDelegate
NSURL *url = [NSURL URLWithString:@"http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"];
NSString *path = [NSString stringWithFormat:@"%@/Library/Application Support/jquery.js", NSHomeDirectory()];
NSData *const JQUERY_FILE = [NSData dataWithContentsOfURL:url];
[JQUERY_FILE writeToFile:path options:NSDataWritingAtomic error:&error];
…
我在其他 2 个文件中导入 AppDelegate.h .m:MasterViewController.m 和 DetailViewController.m
我在尝试构建项目时遇到编译错误。
Ld /Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Products/Debug-iphonesimulator/Test_JSON_V2.app/Test_JSON_V2 normal i386
cd /Users/Karine/Projects/Test_JSON_V2/IOS-ManualJson
export IPHONEOS_DEPLOYMENT_TARGET=7.1
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk -L/Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Products/Debug-iphonesimulator -F/Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Products/Debug-iphonesimulator -filelist /Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Intermediates/Test_JSON_V2.build/Debug-iphonesimulator/Test_JSON_V2.build/Objects-normal/i386/Test_JSON_V2.LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=7.1 -framework CoreGraphics -framework UIKit -framework Foundation -Xlinker -dependency_info -Xlinker /Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Intermediates/Test_JSON_V2.build/Debug-iphonesimulator/Test_JSON_V2.build/Objects-normal/i386/Test_JSON_V2_dependency_info.dat -o /Users/admin/Library/Developer/Xcode/DerivedData/Test_JSON_V2-avjvupkzamqjszcpvufoeqrdbjin/Build/Products/Debug-iphonesimulator/Test_JSON_V2.app/Test_JSON_V2
Undefined symbols for architecture i386:
"_APPLICATION_FILE", referenced from:
-[MasterViewController viewDidLoad] in MasterViewController.o
"_JQUERYUI_FILE", referenced from:
-[DetailViewController webViewDidFinishLoad:] in DetailViewController.o
"_JQUERY_FILE", referenced from:
-[DetailViewController webViewDidFinishLoad:] in DetailViewController.o
"_JQUERY_MOBILE_CSS_FILE", referenced from:
-[DetailViewController webViewDidFinishLoad:] in DetailViewController.o
"_JQUERY_MOBILE_FILE", referenced from:
-[DetailViewController webViewDidFinishLoad:] in DetailViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我想给你一个 printScreen 但我不能,因为我太初学者了:/
我检查了我的 3 m 文件是否在文件编辑器中的 Target Membership 和 Compile Sources 中(在 Build 阶段) 我尝试:
- 创建一个包含所有常量的 .h 文件并通过执行编辑器 -> 添加构建阶段 -> 添加副本头构建阶段来添加它
- 将 AppDelegate.h 添加到 Link Binary With Libraries 中
- 在构建设置中添加新的用户标题搜索路径
当我使用并单击 MasterViewController 或 DetailViewController 中的全局常量时,右侧的帮助窗口显示它是在正确的文件中声明的。
请问您有什么想法吗? 提前致谢。
编辑 22/07/2014
我尝试在一个简单的应用程序中定义和使用全局常量。它适用于:
- 标头中的声明位于@interface 块之外
- m 文件中的赋值在 @implementation 块之外
但我不知道如何将我的代码添加到我的 AppDelegate.m 文件的 @implementation 之外。我将调查这一点。
【问题讨论】:
-
您需要一个
.m文件,其中包含您在.h文件中声明的所有变量的非外部 定义。通过使用 extern,您是说变量的定义可以在其他地方找到,但无论该定义在哪里,它都不会链接到应用程序 -
你好@Petesh。我的常量在我的
AppDelegate.m中分配,这个文件正在添加到编译源中。如果我在 .m 文件中删除NSData *const JQUERY_FILE = [NSData dataWithContentsOfURL:url];byJQUERY_FILE = [NSData dataWithContentsOfURL:url];我有一个错误:只读变量不可分配。
标签: objective-c ios7 reference xcode5 constants