0

我为 ios 创建了一个通用框架。在框架中,我有一个提供 gps 位置的类。此类使用导入 CoreLocation/CoreLocation.h。但是 CoreLocation 框架不应该是我自己框架的一部分。所以我必须检查框架是否存在。为此,我使用示例中的 NSClassFromString 。

但是,如果我从未将 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;
}
4

1 回答 1

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)块内,这就是您认为它有效的原因。

于 2013-06-28T15:30:08.533 回答