0

注: おそらく、この質問は、純粋な Objective-C の専門家によっても回答される可能性がありますか? 私は主に MonoTouch で作業していますが、この問題はMonoTouch 固有のものではない可能性があると思います。

通常、XCode の Assistant Editor で.hファイルが表示されない場合は、すべてを閉じて obj ディレクトリを削除し、すべての .xml ファイルを再構築しますIndexingプロセスが完了するのを待ちます。しかし、今回は実際に.hファイルを表示することができないため、新しいアウトレットを自分のFooViewController.

IBClassDescriberこれまでのところ、私はそれを私の空の要素まで追跡しましたFooViewController.xib

<object class="IBClassDescriber" key="IBDocument.Classes"/>

これは次のようになります。

<object class="IBClassDescriber" key="IBDocument.Classes">
        <array class="NSMutableArray" key="referencedPartialClassDescriptions">
                <object class="IBPartialClassDescription">
                        <string key="className">FooViewController</string>
                        <string key="superclassName">UIViewController</string>
                        <dictionary class="NSMutableDictionary" key="outlets">
                            ...
                        </dictionary>
                        <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
                            ...
                        </dictionary>
                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                <string key="majorKey">IBProjectSource</string>
                                <string key="minorKey">./Classes/FooViewController.h</string>
                        </object>
                </object>
        </array>
</object>

.hのファイルへminorKeyのリンクがありますIBClassDescriptionSource

プロジェクトをクリーンアップし、すべてのアプリを閉じて、objおよびbinディレクトリを削除しようとしました。ファイルの名前を変更しようとしました(上記と一緒に)。そして、他のさまざまな散発的な呪い、削除/元に戻す/そして大声で物を叩きます。無駄に。

IBClassDescriber空になった要素を復元する方法を知っている人はいますか?

ファイル履歴を振り返って、いつ消えたかを確認します。多分それは私に手がかりを与えるでしょう。

ありがとう!CM

4

1 に答える 1

0

したがって、このシナリオは (他の人が行ったように)ViewControllerファイルの名前を変更し、古い名前へのすべての参照を更新できなかったときに発生しました。ビュー コントローラーの名前を変更する必要がある場所はいくつかありますが、実際には、XCode と MonoDevelop を同期させるために一致させる必要がある重要な場所は 2 つだけです。この例では、という名前のビュー コントローラーがあり、その名前FooViewControllerを に変更したとしBarViewControllerます。

まず、XCode (XC) を起動するたびに、MonoDevelop (MD) は、0 から始まり、XC を再起動するたびに 1 ずつ増加するobj/XCode/#という名前の一時ディレクトリを作成します。#MD を再起動するたびに、番号は 0 にリセットされます。XC を閉じて MD に戻るたびに、ディレクトリは削除されます。

注: Finder やターミナルなどからディレクトリを参照している場合、ディレクトリは削除されません。

MD は、XC が参照することを期待するディレクトリに必要なファイルを作成します.h。これらのファイルの名前は、 の属性.mの値に基づいています。私の場合、ファイルを次のように適切に更新しました。RegisterYourViewController.designer.cs.designer

[Register ("BarViewController")]

開く.xibと、恐ろしいNo Assistant Resultsエラーが表示されます。

この時点で、私の.xibファイルを MD のソース コード エディタで開くと、完全なセクションが表示されました (ただし、まだ更新していないためIBClassDescriber、不適切に参照しています)。./Classes/FooViewController.h

次に行ったのは、from XC を保存することでした。.xibXC が見つからなかったので./Classes/FooViewController.h(MD は現在 を生成していました)、からセクションをBarViewController.h削除し、空のエンティティを与えました。IBClassDescriber.xib

<object class="IBClassDescriber" key="IBDocument.Classes"/>

適切に更新できなかったので.xib、このセクション全体を失ってしまいました (これには、必要のない、または再作成する方法を知らない多数の参照が含まれていました)。

-1.CustomClassnameこれを修正する鍵は、 のプロパティ.xibが正しく設定されていないことに気付くことでした。Register設定に合わせて更新

<dictionary class="NSMutableDictionary" key="flattenedProperties">
    <string key="-1.CustomClassName">BarViewController</string>
    ...
</dictionary>

ファイルを再保存すると、XCはファイルIBClassDescriberへの適切な参照を使用してセクション全体を再作成しました.h

<object class="IBClassDescriber" key="IBDocument.Classes">
        <array class="NSMutableArray" key="referencedPartialClassDescriptions">
                <object class="IBPartialClassDescription">
                        <string key="className">BarViewController</string>
                        <string key="superclassName">UIViewController</string>
                        <object class="NSMutableDictionary" key="outlets">
                            ...
                        </object>
                        <object class="NSMutableDictionary" key="toOneOutletInfosByName">
                            ...
                        </object>
                        <object class="IBClassDescriptionSource" key="sourceIdentifier">
                                <string key="majorKey">IBProjectSource</string>
                                <string key="minorKey">./Classes/BarViewController.h</string>
                        </object>
                </object>
        </array>
</object>

要約すると、ファイルの名前を変更する場合、変更する場所は次のとおりです。

  1. メインの ViewController クラスをリファクタリング/名前変更します (例: . リファクタリングFooViewController.csを使用 (クラス ファイルを右クリック -> リファクタリング -> 名前を変更) すると、ファイルやコード全体のクラスへの参照BarViewControllercsなど、多くのものが更新されます。.designer
  2. public GrepViewController () : base ("BarViewController", null)実行時にクラスをロードするために必要なViewController コンストラクターのスーパークラスに渡される文字列値を変更します
  3. .designerファイルを開き、呼び出しを変更して、RegisterXC と MD 間のリンクが維持されるようにします。[Register ("BarViewController")] partial class BarViewController
  4. 次の名前を変更し.xibます。BarViewController.xib
  5. MD でソース エディター (右クリック -> で開くBarViewController.xib-> ソース コード エディター) で開き、-1.CustomClassNameキーを変更します。<string key="-1.CustomClassName">BarViewController</string>
  6. .xibMD から保存
  7. BarViewController.xibXCで開きます。(MD で開いている場合は、右クリック -> アプリケーションで開く -> XCode を選択する必要があります)。インデックス作成が完了するまで待ってから、アシスタント エディターを開きます。BarViewController.h(正しく)開かれていることに注意してください。
  8. .xibを XC から保存します。
  9. MD で を開き、最初は空だったとしても、セクションが完全に指定されていることに.xib注意してください。IBClassDescriber

それを出荷!

これが誰かの助けになり、XC と MD の間のつながりの謎を解き明かすことを願っています。少なくとも、次にこの問題に遭遇したときに何をすべきかを思い出させてくれます。

乾杯、CM

于 2012-10-26T01:37:30.840 に答える