2012-01-02 8 views
2

私はxCodeで "Build and analyze"を行い、 "null pointerのDereference"を取得しました。私は下のコードで、どの行のメッセージを受け取ったかを書き留めました。私はiPhone用に開発中です。nullポインタ、警告の参照を解除しました。

"PDFScrollView.h"

#import "ENsightAppDelegate.h" 
@interface PDFScrollView : UIScrollView <UIScrollViewDelegate> { 

ENsightAppDelegate *appDelegate; 
} 

@end 

"PDFScrollView.m"

- (id)initWithFrame:(CGRect)frame 
{ 
if ((self = [super initWithFrame:frame])) { 

    // Set up the UIScrollView 
    self.showsVerticalScrollIndicator = NO; 
    self.showsHorizontalScrollIndicator = NO; 
    self.bouncesZoom = YES; 
    //self.decelerationRate = UIScrollViewDecelerationRateFast; 
    self.delegate = self; 
    [self setBackgroundColor:[UIColor grayColor]]; 
    self.maximumZoomScale = 5;//200 
    self.minimumZoomScale = 0.5;//.85 
    self.userInteractionEnabled = YES; 
    self.delaysContentTouches = YES; 
    self.canCancelContentTouches = NO; 

} 
appDelegate =(ENsightAppDelegate *) [[UIApplication sharedApplication] delegate]; 
pdfView=[appDelegate GetLeaveView]; 
[self addSubview:pdfView]; 
return self; 

} 

は、それは私が便利だと思うものを貼り付け、完全なコードではありません。

私はこれが非常に奇妙なことがわかります。どうして私はこのメッセージを受け取りますか?

enter image description here

答えて

8

自己がnilであると、その後のことができます。 'self'のインスタンス変数にアクセスしません。したがって、これらの変数はif文の内部でのみ参照する必要があります。言い換えれば、自己がゼロでない場合に限る。

- (id)initWithFrame:(CGRect)frame { 

    if ((self = [super initWithFrame:frame])) { 

     // Set up the UIScrollView 
     self.showsVerticalScrollIndicator = NO; 
     // ... bunch of other properties set... 
     // ... btw, better style here would be to set the ivars directly (in an initializer) 

     appDelegate =(ENsightAppDelegate *) [[UIApplication sharedApplication] delegate]; 
     pdfView=[appDelegate GetLeaveView]; 
     [self addSubview:pdfView]; 
    } 

    return self; 
} 
+0

ありがとうございました。最初の試みに取り組んでいる –

1

クラスのappDelegateインスタンスVARのですか?もしそうなら、あなたはif (self =....でそれをやっているはずです。 [self addSubview...]と同じです。基本的にif文が失敗した場合は、処理するオブジェクトがありません。

0

appDelegateが実際には[self appDelegate]なので、nullをselfに割り当てると、nullポインタを逆参照します。

とにかく - selfは現在のオブジェクトを指していますが、なぜそれに割り当てますか?割り当てなしで直接使用することができます。

そして最後 - あなたはとにかく上-前の最後の行に明示的に使用selfを行う、そしてここにnullであることは明らかである:

[self addSubview:pdfView]; 
+0

回答ありがとう –

関連する問題