gpt4 book ai didi

ios - 属性不会在 iOS 7 中初始化

转载 作者:行者123 更新时间:2023-11-28 22:08:28 25 4
gpt4 key购买 nike

我正在为 iOS 7 开发,但我仍然必须手动编写 getter,否则我的属性将不会被初始化。我尝试手动合成这些属性,尽管不再需要这些属性,但并没有成功。

在我下面的 View Controller 中,我使用了属性 motionTracker,它永远不会被初始化。我的所有项目都有同样的问题,所以我知道这是我的误解。

#import "ViewController.h"
#import "TracksMotion.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UIButton *startRecording;
@property (weak, nonatomic) IBOutlet UIButton *stopRecording;

@property (strong, nonatomic) TracksMotion *motionTracker;
@end

@implementation ViewController

@synthesize motionTracker = _motionTracker;

- (void)startMyMotionDetect
{
[self.motionTracker startsTrackingMotion];
}

@end

motionTracker 有一个用于方法 startsTrackingMotion 的公共(public) API,所以我不知道为什么这不起作用。

#import <Foundation/Foundation.h>
#import <CoreMotion/CoreMotion.h>

@interface TracksMotion : NSObject

- (void)startsTrackingMotion;

- (void)stopTrackingMotion;

@property (strong, nonatomic) CMMotionManager *motionManager;

@end

最佳答案

属性/实例变量不会神奇地为您初始化。当你说:

@property (strong, nonatomic) TracksMotion *motionTracker;

...您只是为实例变量保留内存空间(并通过 @synthesize 或自动合成生成 getter 和 setter 方法)。那里没有实际的 TracksMotion 对象,直到您将一个对象放在那里。你必须编写代码来做到这一点。您必须创建或获取一个 TracksMotion 实例,并在某个时候将其分配给 self.motionTracker,大概是在 self 生命周期的早期(在此例,那是一个 ViewController 实例)。在您运行执行此操作的代码之前,self.motionTracker 为 nil。

(您可能感到困惑,因为它看起来像 outlets 自动初始化。例如,您有 @property (weak, nonatomic) IBOutlet UIButton *startRecording; 果然,self.startRecording 是一个按钮。但那是因为 nib 加载过程为您做了我所说的您必须做的事情:它从 Storyboard或 .xib 文件,并将其分配给此实例变量。)

关于ios - 属性不会在 iOS 7 中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com