Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';CbundleGetDataPointerForname是否适用于iOS 8风格的框架?_Ios_Objective C_Frameworks - Fatal编程技术网

为什么';CbundleGetDataPointerForname是否适用于iOS 8风格的框架?

为什么';CbundleGetDataPointerForname是否适用于iOS 8风格的框架?,ios,objective-c,frameworks,Ios,Objective C,Frameworks,通常在iOS中你可以。但是,我发现CbundlegetDataPointerForName总是为iOS-8风格框架中定义的常量返回NULL指针,如中所述 为了复制,我只是用Xcode框架模板创建了一个框架,添加了一个构建脚本来生成一个通用二进制文件,然后将创建的框架拖到另一个项目中,就得到了框架项目。然后我尝试从中加载一个常量,如下所示: void * versionNumberConstant = CFBundleGetDataPointerForName(CFBundleGetMainBun

通常在iOS中你可以。但是,我发现
CbundlegetDataPointerForName
总是为iOS-8风格框架中定义的常量返回
NULL
指针,如中所述

为了复制,我只是用Xcode框架模板创建了一个框架,添加了一个构建脚本来生成一个通用二进制文件,然后将创建的框架拖到另一个项目中,就得到了框架项目。然后我尝试从中加载一个常量,如下所示:

void * versionNumberConstant = CFBundleGetDataPointerForName(CFBundleGetMainBundle(), CFSTR("TestFramework2VersionNumber"));
NSLog(@"Version number was %@",versionNumberConstant ? @"PRESENT" : @"NULL"); // Prints NULL
出于复制目的,具有框架项目,并尝试使用
CFBundleGetDataPointerForName
从该框架加载常量。 我还可以将这个问题复制到其他开发人员开发的框架中,例如

为了防止指针不在
CbundleGetMainBundle()
中出现问题,我还循环了每个
CbundleRef
,无法从其中任何一个加载常量:

CFArrayRef array = CFBundleGetAllBundles();
for (int i = 0; i < CFArrayGetCount(array); i++) {
    CFBundleRef bundleRef = (CFBundleRef)CFArrayGetValueAtIndex(array, i);
    void * versionPointer = CFBundleGetDataPointerForName(bundleRef, CFSTR("TestFramework2VersionNumber"));
    NSLog(@"Version pointer is %@",versionPointer ? @"PRESENT" : @"NULL");
}
CFArrayRef数组=CFBundleGetAllBundles();
对于(int i=0;i
是否有人知道这是为什么,或者是否有一些构建设置我可以更改以修复它

版本信息:

  • Xcode:6.2版6C131e
  • iOS:8.2(12D508)
  • 设备:iPhone 6/iPhone 6模拟器

好的,问题是我需要加载该框架正在使用的特定捆绑包,如下所示:

NSURL *testFramework2URL = [[[[NSBundle mainBundle] resourceURL] URLByAppendingPathComponent:@"Frameworks" isDirectory:YES] URLByAppendingPathComponent:@"TestFramework2.framework"];

CFBundleRef bundleRef = CFBundleCreate(NULL, (__bridge CFURLRef)testFramework2URL);
NSLog(@"Bundle Ref = %@",bundleRef);

double * manualVersion = CFBundleGetDataPointerForName(bundleRef, CFSTR("TestFramework2VersionNumber"));
NSLog(@"Manual version = %@",manualVersion ? @"present" : @"NULL"); // Manual version = present

double version = *manualVersion;
NSLog(@"Version = %g",version); // Version = 1
我也可以使用
CFBundleGetAllBundles()
来实现这一点,尽管我在问题中说过(我在最初使用
CFBundleGetAllBundles()
函数或其他东西时一定犯了错误)