ホームページ >バックエンド開発 >PHPチュートリアル >iOS 開発に関する質問 (9)
101. コンパイル エラー: ld: -lPods のライブラリが見つかりません
このエラーは、プロジェクトで CocoaPods が使用されている場合 (通常はリリース中) によく発生します。
これは、ポッドのインストール後、cocoaPods が新しいワークスペースを作成するためです。プロジェクトを閉じて、再度開く必要があります。問題は解決された。
102. iOS の時刻が常に実時間より 8 時間遅いのはなぜですか
たとえば、北京時間「2014-4-4 22:00」(文字列) は NSDate に変換する必要があります。文字列の NSDate への変換は、通常、NSDateFormatter を通じて実行されます。 iOS では、NSDate は GMT 時間で保存されるため、NSDateFormatter は文字列の現在のタイム ゾーンの現地時間を自動的に処理します。つまり、変換された北京時間 (文字列 "2014-4-4 22:00") を GMT に変換します。時刻 (「2014-4-4 14:00」)。この NSDate (longlong、1970 年からの秒数またはミリ秒数) をサーバーに直接渡すと、サーバーはこの時間を北京時間 (実際には GMT 時間) として使用するため、時差は 8 時間になります。
正しいアプローチは、この NSDate に基づいて時差を追加することです。時差を計算するには、現在のタイムゾーンを知る必要があります。 [NSTimeZonesystemTimeZone] は、現在のタイム ゾーン (イースト 8 ゾーン) を取得し、秒からGMTForDate: メソッドを使用して、このタイム ゾーン (イースト 8 ゾーン) の時差 (秒単位) を取得できます。コードは次のとおりです:
NSDateFormatter* df=[NSDateFormatter new]; // [dfsetLocale:[NSLocale currentLocale]]; df.dateFormat=@"yyyy-MM-dd HH:mm"; NSDate* date=[dfdateFromString:@"2014-4-4 22:00"]; NSTimeZone *zone =[NSTimeZone systemTimeZone]; NSInteger interval = [zonesecondsFromGMTForDate: date]; NSDate *localeDate =[date dateByAddingTimeInterval:interval]; NSLog(@"%@",localeDate);
103. UITableViewController でキーボード ポップアップ アニメーションを無効にする
TableViewController には、セル内の入力コントロールがソフト キーボードをポップアップさせるためのコードが組み込まれています。自動的に上にスクロールします。しかし、この機能は時々大きな問題を引き起こすことがあります。入力コントロールが見えない場所までスクロールされてしまうことがあります。フレームワークのコードを変更することはできないため、この場合は TableViewController (サブクラス化) の使用を諦め、代わりに一般的な UIViewController+UITableView を使用する必要があります。ただし、TableViewContrller を使用しなければならない場合もあります。たとえば、その静的セルを使用したい場合は、次の方法で解決できます。 UITableViewController サブクラスの viewWillAppear メソッドをオーバーライドして、親クラスの viewWillAppear 動作を無効にします。つまり、[superviewWillAppear:animated]:
-(void)viewWillAppear:(BOOL)animated{ // Override super method with don'tcall [super viewWillApper] }
104 を呼び出さないでください。どのような場合に NSCache を使用する必要がありますか? NSCache は、メモリ不足に基づいてキャッシュ オブジェクトの 1 つを自動的に解放します (たとえば、ビューが破棄された場合、またはビューが存在する場合)。キャッシュされたオブジェクトが多すぎます)。したがって、NSCache によってキャッシュされたオブジェクト (これらのオブジェクトなど) は、必要に応じてネットワークからダウンロードできるデータである必要があります。それ以外の場合は、NSCache を使用しないでください。オブジェクトはある時点で破棄されます。
したがって、NSCache を使用する場合は、取得したオブジェクトがキャッシュに存在しない場合は注意する必要があります:
-(CachedObject)getCachedObject:(id)key{ id* obj=[NSCacheObjectobjectForKey:key]; if (cb==nil) { obj=[[CachedObjectalloc]init]; // Recreate cached object …… } return obj; }105、Xcode5 の Pods Archive の問題
問題の説明:
デバッグ時に次のエラーが発生します。正常かもしれません):
ld: -lPods のライブラリが見つかりません
問題は Xcode5 です)。
解決策:
Pods プロジェクトのすべてのターゲットの下で、そのアーキテクチャがメイン プロジェクトと一致するように設定します。
106. 静的ライブラリでサポートされているアーキテクチャを確認する方法
「lipo -info static library file」コマンドを使用します。例:
lipo -info Unrar4iOS
その後、ターミナルに次のように表示されます:
fat ファイル内のアーキテクチャ: Unrar4iOS は、armv7 armv6 i386
107 です。プロジェクトに特定の静的ライブラリを導入すると、質問 105 で述べたように、アーカイブで「アーキテクチャ armv7s/arm64 の未定義のシンボル」エラーが発生します。質問 105 の解決策の使用に加えて、別の回避策があります。
まず静的ライブラリのアーキテクチャを確認してください (質問 106 を参照)。次に、静的ライブラリのアーキテクチャをサポートするようにスキームを変更します。次に、ビルド設定で Build Active ArchitectureOnly を変更し (選択したアーキテクチャのみをコンパイルします)、値を Yes に変更します。それからコンパイルします。
108. Autolayout では、UITableView の高さが正しくありません。
Autolayout では、ナビゲーション バーがある場合、ビュー上の UITableView は制約によって制限され、実行時の高さはナビゲーション バーのない高さにリセットされます。このとき、制約の影響を排除するために viewDidLayoutSubviews メソッドを実装する必要があります:
- (void)viewDidLayoutSubviews { _table.frame=CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); }
ビュー B の戻るボタンのタイトルを変更してビュー A に戻りたい場合は、ビュー A で次のコードを使用するだけです:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:nil]; B视图不用做任何操作。
O-C コレクション オブジェクトでは null 値 (nil) の挿入が許可されておらず、NSNull は nil ではないため、コレクションが空である (リストの終わりを示す) ことを示すために NSNull オブジェクトが使用されます。また、nil とは異なり、NSNull にメッセージを送信すると例外が発生します。
NSNull には [NSNull null] という唯一のメソッドがあり、これを使用してオブジェクトが NSNull であるかどうかをテストできます:
BOOL isNSNull(id any){ return [any isEqual:[NSNullnull]]; }
以上就是iOS 开发百问(9)的内容,更多相关内容请关注PHP中文网(www.php.cn)!