開発中に発生した問題と解決方法

5037 ワード

1.appの起動に関するいくつかの問題
  • アプリの起動時に、時間のかかる操作があると、黒い画面が点滅します.チェック可能:1.LaunchImageが正しいかどうか2.plistファイルの読み書きに時間がかかる
  • -(BOOL)アプリケーション:(UIApplication*)アプリケーションdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{}widgetを使用してappを起動するとlaunchOptionsにデータが存在し、保存システムによってプッシュされたkey:k y y y y y y y y m N o t i f i f icationUserDefaulutskeyによってappが起動し潰れ、この場合launchOptions=nil;
  • iOSプログラム起動時にアプリケーションが呼び出されます.2番目のパラメータlaunchOptionsはNSDictionaryタイプのオブジェクトで、このプログラム起動の理由が格納されています.LaunchOptionsの可能なキー値はUIApplication Class ReferenceのLaunch Options Keysセクションを参照してください.
  •  2.1、       ,lauchOptions    ;
     2.2、          openURL:  , UIApplicationLaunchOptionsURLKey        URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey           bundle ID (NSString);
     2.3、        , UIApplicationLaunchOptionsLocalNotificationKey                   (UILocalNotification);
     2.4、        , UIApplicationLaunchOptionsRemoteNotificationKey                  userInfo(NSDictionary);
     2.5、  key UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey, UIApplicationLaunchOptionsNewsstandDownloadsKey。
    

    2.tableViewネストの問題
  • cellにtableViewをネストする場合、cell frameがサブtableViewのfrmaeより小さいと、tableViewクリック領域が
  • に応答できなくなる.
  • 複数のviewがネストされている場合、ジェスチャー競合の問題が発生します.この場合、ジェスチャーエージェント:UIGestureRecognizerDelegateを書き換えて、ジェスチャーに応答する必要があるview
  • を識別する必要があります.
    - (Bool)GestureRecognizer:(UIGestureRecognizer *)gestureRecoginzer shouldReceiveTouch:(UITouch *)touch {
      if([touch.view isKindOfClass:[UILabel class]] ){
            return YES;
        } else {
            return NO;
        }
      }
    

    3.iOS 11で発生した問題と解決方法に適合
  • UIscrollViewとそのサブクラス(UItableView)の適合iOS 11の前に、VCで設定:automaticallyAdjustsScrollViewInsets = YES; scrollViewは対応する内側余白を自動的に設定し、tableHeaderViewがある場合はナビゲーションバーとの適合に問題はありません.iOS 11以降、システムはデフォルトでself-sizingを開き、TableHeaderViewの背景図を20ピクセル下に移動してナビゲーションバーの下に移動し、appleドキュメント解析:
  • Self-Sizing by Default
    NEW
     Link on iOS 11, all estimated heights default to UITableViewAutomaticDimension Headers, footers, and cells use self-sizing by default
    iOS only—behavior is not changed on tvOS
    Ensure all views have sufficient internal constraints
    Return fixed sizes from delegate methods
    

    次の設定が必要です.
    tableView.estimatedRowHeight = 0;
    tableView.estimatedSectionHeaderHeight = 0 ;
    tableView.estimatedSectionFooterHeight = 0;
    
    if (systemVersion >= 11) {
       self.tableView.contentInsetAdjustmentBehavior  = UIScrollViewContentInsetAdjustmentNever;
    } else {
       self.automaticallyAdjustsScrollViewInsets = NO;
    }
    

    4.アルバム権限の取得
  • iOS 11では、アップルがアルバムの権限keyを調整し、元のNSPhoto LibraryUsageDescriptionをiOS 11以降、NSPhoto LibraryAddUsageDescription
  • に変更しました.
        NSPhotoLibraryAddUsageDescription  //iOS 11
        App      ,        
        NSPhotoLibraryUsageDescription
        App      ,         //

    5.ナビゲーションバー
    iOS 11はナビゲーションバーを大きく変更しました.
  • は、ナビゲーションバーUIBarButtonItemを設定するために、以前は次の方法を使用していました.iOS 11に着きました.UIBarButtonItemはTint Colorでレンダリングされ、元の色が消去されます.解決方法:UIImageのレンダリングモードであるUIImageを設定する.renderingModeはU I I I m a g e R e nderingModeAlwaysOriginalです.Tint Colorを使用せずに画像の元の状態を常に描画します.
  • //         ,iOS11       
    - (void)setNavigationBarBackButtonItem:(NSString *)image {
        UIImage *backImage = [UIImage imageNamed:image];
        UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:self action:@selector(popViewControllerAnimated)];
        backItem.tintColor = [UIColor colorWithPatternImage:backImage];
        backItem.title = @"";
        self.navigationItem.leftBarButtonItem = backItem;
    }
    

    InitWithCustomViewの方法では、上記の影響を受けません.
      _leftBtn = [[UIButton alloc] ];
        [_leftBtn setImage:image forState:UIControlStateNormal];
        _leftBtn.backgroundColor = [UIColor cyanColor];
        _leftBtn.imageView.contentMode = UIViewContentModeScaleAspectFit;
        _leftBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
        [_leftBtn addTarget:self action:@selector(leftBtnClicked) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_leftBtn];
        self.navigationItem.leftBarButtonItem = leftBarButtonItem;
    
  • は2を表し、iOS 11のinitWithCustomViewの方法でナビゲーションバーにボタンを設定し、画像に@3 x接尾辞を付けないと、画像は元のサイズを超えて大きく表示されます.解決策は画像に@3 xを加えることです.

  • 6、iOS 10がネットワークに接続できない問題
    iOS 10システムでは、Appがどうしてもインターネットに接続できない場合があります.この場合、私たちのAppはユーザーにネットワーク要求を許可するかどうかを発行していないため、以下の操作に従ってAppにネットワーク要求を許可するかどうかをポップアップさせることができます.
    設定-無線LANまたはセルラーモバイルネットワーク-無線LANとセルラーモバイルの移動を使用して任意のAppの権限を変更して元のオプションを復元し、操作が完了した後に関連する問題のアプリケーションを開き、ネットワークの選択をポップアップし、確認すればよい
    7、一部のiOSデバイスはカレンダーのアラートを設定する時、追加に失敗した
    テストを始めた同僚からのフィードバックはiOS 10です.3.2の问题は、后で缲り返しチェックして、コードの问题ではないことを确认して、设备自身が注意を设置してicloudで开く(あるいはかつて开いたことがある)[画像のアップロードの中で...(カレンダーを开く注意)]It works now!