4

私は初めて静的アナライザーを使用していますが、矢印を理解するのに苦労しています。SOに関するいくつかの同様の質問を調べた後、問題はCGSizeサイズがゼロ値であるということだと思いますが、それがどのように機能するかは完全にはわかりません。

コードは次のとおりです。

 - (void)keyboardDidShow:(NSNotification*)notification {
    CGSize size = CGSizeMake(0, 0);
    size = [self keyboardSize:notification];
      if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
            detailTableView.frame = CGRectMake(detailTableView.frame.origin.x, detailTableView.frame.origin.y,
                                       detailTableView.frame.size.width, kTableViewMovableHeight + kTableViewDefaultHeight -  size.height
                                       );
    //detailTableView.scrollEnabled = YES;
    }
}


- (CGSize)keyboardSize:(NSNotification *)aNotification {
NSDictionary *info = [aNotification userInfo];
NSValue *beginValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
CGSize keyboardSize;
UIDeviceOrientation _screenOrientation = orientation;
if ([UIKeyboardDidShowNotification isEqualToString:[aNotification name]]) {
    if (UIDeviceOrientationIsPortrait(orientation)) {
        keyboardSize = [beginValue CGRectValue].size;
    } else {
        keyboardSize.height = [beginValue CGRectValue].size.width;
        keyboardSize.width = [beginValue CGRectValue].size.height;
    }
} else if ([UIKeyboardWillHideNotification isEqualToString:[aNotification name]]) {
    if (_screenOrientation == orientation) {
        if (UIDeviceOrientationIsPortrait(orientation)) {
            keyboardSize = [beginValue CGRectValue].size;
        } else {
            keyboardSize.height = [beginValue CGRectValue].size.width;
            keyboardSize.width = [beginValue CGRectValue].size.height;
        }
        // rotated
    } else if (UIDeviceOrientationIsPortrait(orientation)) {
        keyboardSize.height = [beginValue CGRectValue].size.width;
        keyboardSize.width = [beginValue CGRectValue].size.height;
    } else {
        keyboardSize = [beginValue CGRectValue].size;
    }
}
return keyboardSize;
}

ここに画像の説明を入力してください

4

2 に答える 2

6
  1. CGSizeはC構造体です
  2. [self keyboardSize:notification]nilを返す可能性があります

C構造体を宣言するとき、その値にはガベージ値があります。つまり、以前にそのメモリにあったものは何でも。の呼び出しが初期化されていないをkeyboardSize返す場合CGSize、そのC構造体は「ガベージ値」と呼ばれるものになります。

CGSizeの実装を確認したので、keyboardSizeメソッドの変数keyboardSizeの宣言を次のように変更します。

CGSize keyboardSize = CGSizeMake(0, 0);
于 2013-02-06T21:01:29.843 に答える
1

else条件がありません。

if ([UIKeyboardDidShowNotification isEqualToString:[aNotification name]]) {
    // ...
} else if ([UIKeyboardWillHideNotification isEqualToString:[aNotification name]]) {
    // ...
}
// else not handled could result in keyboardSize not being set.
return keyboardSize;

これを修正するには、elseの欠落状態を処理するか、keyboardSizeを初期化します。

CGSize keyboardSize = CGSizeZero;
于 2013-02-06T21:21:43.613 に答える