Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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
Iphone 在iOS应用程序中访问静态库中的属性_Iphone_Objective C - Fatal编程技术网

Iphone 在iOS应用程序中访问静态库中的属性

Iphone 在iOS应用程序中访问静态库中的属性,iphone,objective-c,Iphone,Objective C,我有一个objective-C静态库(iOS SDK 6): 实现文件(.m) #import "MyClass.h" @implementation MyClass static id _instance; static NSString *version; - (id)init { if(_instance == nil) { _instance = [super init]; version = @"1.0"; } return

我有一个objective-C静态库(iOS SDK 6):

实现文件(.m)

#import "MyClass.h"

@implementation MyClass
static id _instance;
static NSString *version;

- (id)init {
    if(_instance == nil) {
        _instance = [super init];
        version = @"1.0";
    }
    return _instance;
}

- (NSString *)getVersion {
    return version;
}

+ (MyClass *)sharedInstance {
    return _instance;
}

@end
当我访问其他iPhone应用程序项目(导入库)中的类时,我无法获取版本字符串

#import "ViewController.h"
#import <MyClass/MyClass.h>

@interface ViewController ()
@end
@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    MyClass *cls = [MyClass sharedInstance];
    NSLog(@"Loaded. Version: %@", [cls getVersion]);
}
@end
#导入“ViewController.h”
#进口
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad
{
[超级视图下载];
MyClass*cls=[MyClass sharedInstance];
NSLog(@“Loaded.Version:%@,[cls getVersion]);
}
@结束

我错过了什么?未报告任何错误,但版本为
(null)
有很多错误

  • 根本不调用
    init
  • 等等
。。。你似乎试图使用单例模式。所以,做这个

+ (MyClass *)sharedInstance {
  static MyClass *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[[self class] alloc] init];
  });
  return instance;
}
。。。并将您的
init
更改为

- (id)init {
  self = [super init];
  if ( !self ) {
    return nil;
  }

  _version = @"1.0";
  return self;
}
。。。并调用
[[MyClass sharedInstance]getVersion]
获取您的版本


请阅读ObjC指南,不要使用
get
前缀。应该是
版本

有很多错误

  • 根本不调用
    init
  • 等等
。。。你似乎试图使用单例模式。所以,做这个

+ (MyClass *)sharedInstance {
  static MyClass *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[[self class] alloc] init];
  });
  return instance;
}
。。。并将您的
init
更改为

- (id)init {
  self = [super init];
  if ( !self ) {
    return nil;
  }

  _version = @"1.0";
  return self;
}
。。。并调用
[[MyClass sharedInstance]getVersion]
获取您的版本


请阅读ObjC指南,不要使用
get
前缀。应该是
version

你能展示一下召唤的实现吗?对不起,应该是
sharedInstance
而不是
call
init真的被调用了吗?。我不这么认为。请尝试打印id cls,并确认其类类型。我想这就是你遗漏的地方。你能展示一下召唤的实现吗?对不起,它应该是
sharedInstance
而不是
courd
init真的被调用了吗?。我不这么认为。请尝试打印id cls,并确认其类类型。我想这就是你错过了什么。对不起,我的新手
Obj-C
skills。看来我学错了教程。现在运作良好。但是我不明白为什么需要
dispatch\u once
dispatch\u once
只调用一次块,这意味着您的类
sharedInstance
方法总是返回相同的对象。阅读此示例-为我的新手
Obj-C
技能感到抱歉。看来我学错了教程。现在运作良好。但是我不明白为什么需要
dispatch\u once
dispatch\u once
只调用一次块,这意味着您的类
sharedInstance
方法总是返回相同的对象。请阅读此示例-