2013-06-28 24 views
0

我为ios创建了一个通用框架。在框架中,我有一个提供gps位置的课程。此类使用导入CoreLocation/CoreLocation.h的。但CoreLocation框架不应该是我自己框架的一部分。所以我必须检查框架是否存在。为了提供这个,我使用NSClassFromString就像在这个例子中一样。为什么CoreLocation的导入和使用在未添加CoreLocation框架的情况下工作?

但是这个例子也工作,如果我从来没有加入CoreLocation无论是我自己的框架,也没有到使用我的框架应用程序。它为什么有效?这可能是拒绝苹果审查的应用程序的原因吗?

#import <CoreLocation/CoreLocation.h> 
... 
-(void)init { 
    self = [super init]; 
    Class CLLocationManagerOrNil = NSClassFromString(@"CLLocationManager");  
    if (CLLocationManagerOrNil) { 
     _locationManager = [[CLLocationManagerOrNil alloc] init]; 
     _locationManager.delegate = self; 

     // update location 
     [_locationManager startUpdatingLocation]; 
    } 
    return self; 
} 
+0

您正在使用的Xcode 5的任何机会? – Amar

+0

我使用的XCode 4.6.3。 – user2531636

回答

0

#import <CoreLocation/CoreLocation.h>允许甚至你没加CoreLocation框架。更重要的是,你可以添加所有的系统框架,如果你想。

但他们没有工作!你会得到错误,如

Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_CLLocationManager", referenced from: 
     objc-class-ref in ViewController.o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

在你的代码,它从来没有if (CLLocationManagerOrNil)块内得到的,这就是为什么你认为这是工作。

相关问题