2016-08-15 184 views
0

我有以下traitCollectionDidChangetraitCollectionDidChange第二次調用失敗

- (void) traitCollectionDidChange:(UITraitCollection *)previousTraitCollection{ 
    [super traitCollectionDidChange:previousTraitCollection]; 

    if (previousTraitCollection.horizontalSizeClass != self.traitCollection.horizontalSizeClass){ 
     NSInteger horizontalClass = self.traitCollection.horizontalSizeClass; 
     NSInteger verticalClass = self.traitCollection.verticalSizeClass; 
     switch(horizontalClass){ 
      case UIUserInterfaceSizeClassCompact: 
       if (verticalClass == UIUserInterfaceSizeClassRegular){ 
        // Setup for iPhone 
       } 
       break; 
      case UIUserInterfaceSizeClassRegular: 
       if (verticalClass == UIUserInterfaceSizeClassRegular){ 
        // Setup for iPad 
       } 
       break; 

      default: 
       break; 
     } 
    } 
} 

Update:即使只是在轉動iPad時也會失敗。任何時候方法再次被調用失敗:if (previousTraitCollection.horizontalSizeClass != self.traitCollection.horizontalSizeClass){給出錯誤:[NSConcreteNotification horizo​​ntalSizeClass]:unrecognized selector sent to instance。由於previousTraitCollectionnil

你知道它爲什麼第二次失敗嗎?

回答

0

好吧,我會發布此,因爲它可能分拆關於支持iOS的7

錯誤是全部由我創造了一些討論。我試圖在一些較早的時間點來支持的iOS 7,並添加以下在viewDidLoad中:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(traitCollectionDidChange:) 
              name:UIDeviceOrientationDidChangeNotification object:nil]; 

這是很公平,那麼它就會被調用不帶參數的2倍。

我的計劃是使用這種方法在ViewDidLoad中查找iOS版本,然後根據iOS版本8添加或刪除NotificationCenter - 顯然這是行不通的。

我可能需要一些宏觀運行iOS 7

那麼何時添加或離開了traitCollectionDidChange,這是問題 - 隨時iOS上的問題發表評論。

謝謝