簡體   English   中英

屬性不會在iOS 7中初始化

[英]Properties don't get initialized in iOS 7

我正在為iOS 7開發,但我仍然需要手動編寫getter,否則我的屬性不會被初始化。 我試圖手動合成這些屬性,即使不再需要它,但這不會。

在我的視圖控制器中,我使用屬性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的公共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或autosynthesis生成getter和setter方法)。 沒有實際的TracksMotion對象, 直到你把它放在那里 你必須編寫代碼才能做到這一點。 您必須創建或獲取 TracksMotion實例並在某個時刻將其分配給self.motionTracker ,大概是在self的生命早期(在這種情況下,這是一個ViewController實例)。 在運行執行此操作的代碼之前, self.motionTracker為零。

(這可能是你被迷惑,因為它看起來像網點自動初始化例如,你有。 @property (weak, nonatomic) IBOutlet UIButton *startRecording;果然, self.startRecording ,是一個按鈕但是,這因為nib-loading進程為你做了我說你必須做的事情:它從storyboard或.xib文件創建一個按鈕,並將它分配給這個實例變量。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM