問題タブ [cocoa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - ユーザーが Cocoa を使用して 24 時間制を使用しているかどうかを確認する方法
ユーザーが 24 時間または 12 時間のどちらを使用しているかを判断しようとしていますが、NSDateFormatter を作成して期間フィールドのフォーマット文字列を検索する以外に、これを把握する良い方法はないようです ('a ' キャラクター)
これが私が今していることです:
これは機能しますが、ちょっと壊れやすいと感じます。もっと良い方法があるはずですよね?
cocoa - ファイルの内容で置換を行っていないXcodeプロジェクトテンプレートに関する特定のヘルプ
プロジェクトテンプレートを作成しようとしていますが、これに関するドキュメントが不十分であるか、存在しません。
いくつかのテンプレートファイルでリバースエンジニアリングを行うと、次のことがわかりました。ただし、実際には機能しません。
まず、プロジェクトテンプレートを次の内部にインストールする必要があることがわかりました。
〜/ライブラリ/アプリケーションサポート/開発者/共有/Xcode/プロジェクトテンプレート
プロジェクトを作成してここにインストールしました。この部分は機能します。これは、Xcodeの[新しいプロジェクト]チューザーの[ユーザーテンプレート]セクションに表示されます。
プロジェクトフォルダには、次のファイルが含まれています。ご覧のとおり、ファイル名を置き換えたい(その部分は機能します)が、後でわかるように、ファイルの内容も置き換えたいと思います。これは起こりません。
- ___PROJECTNAME___。xcodeproj
- ___PROJECTNAMEASIDENTIFIER____Prefix.pch
- ___PROJECTNAMEASIDENTIFIER___。icns
- ___PROJECTNAMEASIDENTIFIER___Delegate.h
- ___PROJECTNAMEASIDENTIFIER___Delegate.m
- ___PROJECTNAMEASIDENTIFIER___Template.html
- Debug.xcconfig
- en.lproj
- Info.plist
- Release.xcconfig
___PROJECTNAME___。xcodeprojパッケージに2つの特別なファイルを入れました。
- TemplateInfo.plist
- TemplateIcon.icns-[新しいプロジェクト]ウィンドウに表示されるアイコン
このテンプレートを使用して新しいプロジェクト(ストレステストとして「Foo&Bar」と呼ばれる)を作成すると、次のファイルが作成されます。
- Debug.xcconfig
- en.lproj
- Foo&Bar.xcodeproj
- Foo ___ Bar_Prefix.pch
- Foo ___ Bar.icns
- Foo ___ BarDelegate.h
- Foo ___ BarDelegate.m
- Foo ___ BarTemplate.html
- Info.plist
- Release.xcconfig
ここまでは順調ですね!
しかし、ファイルの内容を見ると、このようなものが得られます。Foo___BarDelegate.mの内容は次のとおりです。
明らかな問題は、どういうわけか私がTemplateInfo.plistを間違って実行していることです。しかし、繰り返しになりますが、私の特別なアイテムが置き換えられていないだけでなく、標準的なアイテムも置き換えられていないことに注意してください!だから多分それはより深い問題です。
しかし、問題のあるTemplateInfo.plistが私の最良の仮説であるため、私が試したいくつかのバリエーションを紹介します。どちらも機能しません。
また:
また:
更新:___によって自動的に名前の変更が発生しているように見えますが、「FilesToRename」キーを追加しようとしました。これは、XML形式のplistコンテンツです(一部の人々は、UTF-8の性質について心配していたため、有効なplistです)。
objective-c - Objective-C の名前空間の競合を解決する最善の方法は何ですか?
Objective-C には名前空間がありません。C によく似ており、すべてが 1 つのグローバル名前空間内にあります。一般的な慣行は、クラスに頭文字を付けることです。たとえば、IBM で働いている場合は、頭に「IBM」を付けることができます。Microsoft で働いている場合は、「MS」を使用できます。等々。イニシャルがプロジェクトを指す場合もあります。たとえば、Adium はクラスの前に「AI」を付けます (その背後にイニシャルを使用できる会社がないため)。Apple はクラスに NS という接頭辞を付け、この接頭辞は Apple 専用に予約されていると述べています。
ここまでは順調。しかし、クラス名の先頭に 2 ~ 4 文字を追加することは、非常に限られた名前空間です。たとえば、MS または AI はまったく異なる意味を持つ可能性があり (たとえば、AI は人工知能である可能性があります)、他の開発者がそれらを使用して同じ名前のクラスを作成することを決定する場合があります。Bang、名前空間の衝突。
これが自分のクラスの 1 つと、使用している外部フレームワークの 1 つとの間の衝突である場合は、クラスの名前を簡単に変更できます。大したことではありません。しかし、2 つの外部フレームワークを使用していて、どちらのフレームワークもソースがなく、変更できない場合はどうなるでしょうか? アプリケーションがそれらの両方とリンクすると、名前の競合が発生します。これらを解決するにはどうすればよいでしょうか?両方のクラスを引き続き使用できるように、それらを回避する最善の方法は何ですか?
C では、ライブラリに直接リンクしないことでこれらを回避できます。代わりに、dlopen() を使用して実行時にライブラリをロードし、dlsym() を使用して探しているシンボルを見つけ、それをグローバル シンボルに割り当てます (任意の方法で名前を付けることができます)、このグローバル シンボルを介してアクセスします。たとえば、一部の C ライブラリに open() という名前の関数があるために競合が発生した場合、myOpen という名前の変数を定義して、ライブラリの open() 関数を指すようにすることができます。 、open() を使用するだけで、もう一方を使用する場合は、myOpen 識別子を介してアクセスします。
Objective-Cで同様のことが可能ですか?そうでない場合、名前空間の競合を解決するために使用できる巧妙でトリッキーなソリューションは他にありますか? 何か案は?
アップデート:
これを明確にするために、名前空間の衝突を事前に回避する方法や、より良い名前空間を作成する方法を提案する回答は大歓迎です。ただし、私の問題を解決しないため、回答として受け入れません。2 つのライブラリがあり、それらのクラス名が衝突しています。それらを変更することはできません。どちらのソースも持っていません。衝突はすでに発生しており、事前に回避できた方法に関するヒントはもはや役に立ちません。それらをこれらのフレームワークの開発者に転送し、彼らが将来より良い名前空間を選択することを願っていますが、当分の間、単一のアプリケーション内で現在フレームワークを操作するソリューションを探しています. これを可能にする解決策はありますか?
objective-c - NSMutableArrayの破棄
NSMutableArray
幸せなオブジェクトの配列があります。これらのオブジェクトは、すべてのオブジェクトの配列をクリアして再入力しようとするたびに、悪意を持ってオン(リーク)します。
このようにinit関数に割り当てられます
私がそれをクリアするために使用したさまざまな方法は次のとおりです。
と
アレイを明示的に割り当てたり解放したりすることもできません。リークは、リストをリセットしようとしたときにのみ発生します。
リセットするときにステップが欠落していますか、それともこれは別の問題ですか?
c - Objective-C を学ぶ前に、まず C を学ぶ
意欲的な Apple 開発者として、Objective-C に移行し、最終的には Cocoa Framework に移行する前に、まず C を学習した方がよいかどうか、コミュニティの意見を聞きたいと思います。
私の直感は、C を学べば良い基礎ができると言っています。
objective-c - NSIndexPath:indexPathWithIndexes:length に必要な「インデックス」を作成する方法:
1 つ以上のノードを持つインデックス パスを作成するクラス メソッドは次のとおりです。
最初のパラメーターで必要な「インデックス」を作成するにはどうすればよいですか?
ドキュメントには、インデックス パスを構成するインデックスの配列として記載されていますが、(NSUinteger *) が必要です。
1.2.3.4 のインデックス パスを作成するには、単に [1,2,3,4] の配列ですか?
cocoa - 明日の真夜中を見つけるためのより良い方法はありますか?
これを行うためのより良い方法はありますか?
その電話をかけるときにたまたま真夜中であっても、常に次の真夜中が欲しいことに注意してください。ただし、23:59:59の場合は、もちろん1秒で来る真夜中が欲しいです。
自然言語の機能は不安定に見えます。「日」フィールドで32を渡すと、Cocoaが何をするかわかりません。(それがうまくいけば、[now dateByAddingYears:...]呼び出しを削除できます)
cocoa - NSProgressIndicatorの高さを変更するにはどうすればよいですか?
デフォルトでは、ココアのプログレスバーは少し太いので、Finderのコピーダイアログに表示されるプログレスバーのように、少しスリムなものが必要です。ただし、Interface BuilderはNSProgressIndicator
コントロールの高さを20ピクセルにロックし、プログラムによるスリム化の試みは機能しません。
と
awakeFromNib
何もしないでください。ヘッダーファイルに見られる示唆に富む外観はNSProgressIndicatorThickness
、私が見ることができるどのメソッドにもプラグインしていないようです。
トリックは何ですか?
cocoa - NSOperation メインの NSAutoreleasePool?
のドキュメントに+[NSThread detachNewThreadSelector:toTarget:withObject:]
は次のように書かれています:
ガベージ コレクションされていないアプリケーションの場合、このメソッド
aSelector
は、新しく切り離されたスレッド用の自動解放プールを設定し、終了する前にそのプールを解放します。
私の質問は、メソッドNSAutoreleasePool
のオーバーライドで独自のものを作成する必要がありますか、それとも作成はによって処理されますか?-[NSOperation main]
NSAutoreleasePool
NSOperation
iphone - ファイルの所有者とビュー コントローラーをリンクする [iPhone SDK]
ViewController と View ウィンドウの間の関係を確立できるという点で、iPhone SDK 2.1 に問題があるようです。ココア タッチ クラスに関しては、先に進んで
UIViewController
サブクラスを追加しました。ターゲットが既存のプロジェクトの一部であることを確認しました。その直後に、ユーザー インターフェイス -> View XIB を追加しました。中UIViewController
には、サンプルコードから文字通りコピー/貼り付けた簡単なコードがあります。
EditViewController.h:
EditViewController.m
お察しのとおり、あまり効果がありません。新しい xib をクリックして でクラス ID を参照するとEditorViewController
、オートコンプリートは発生しません
EditorViewClass
。ビューから [File's Owners] を Ctrl + クリックしようとすると、nada が表示されます。
このプロセスで見落としている可能性のある特異性には、ビューをコントローラーに出力できないものがありますか?
プロジェクト名がターゲットとしてチェックされているのを確認する以外に、自分のユーザー インターフェイス ビュー XIB がプロジェクトに関連付けられていることを確認するにはどうすればよいですか?