0

誰かがそれに光を当てることができることを期待して、何らかの理由でこれに一日中苦労しています。

を設定しCCLabelTTF、タッチ ハンドラーを追加しました。タッチ エンドで、そのラベルの文字列値をUIReferenceLibraryViewController. これが私の試みの様子です(私のゲームは横向きモードであるため、90度の回転を試みています):

if(NSClassFromString(@"UIReferenceLibraryViewController")) {

                if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word.Value] == YES)
                {
                     UIReferenceLibraryViewController *reference =
                    [[UIReferenceLibraryViewController alloc] initWithTerm:word.Value];
                    reference.view.center = CGPointMake(winSize.width/2, winSize.height/2);
                    reference.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(90.0f));

                    [[[CCDirector sharedDirector] view] addSubview:reference.view];
                }
            }

この種の作品。ラベルをクリックすると、ラベルUIReferenceLibraryViewControllerが表示され (何らかの理由で横向きに回転されませんが)、定義が表示されます。しかし、 [完了] ボタンをクリックするUIReferenceLibraryViewControllerと、EXEC_BAD_ACCESS でアプリがクラッシュします。図ここには明らかな何かが欠けていますが、何がわからないのですか。

もちろん、どんな助けも大歓迎です。

ありがとう
ムスタファ

4

1 に答える 1

0

同様の問題がありました。私の場合、UIReferenceLibraryViewControllerクラスのメソッド内でオブジェクトを宣言してインスタンス化していました。UIReferenceLibraryViewControllerオブジェクトがその時点で存在しなくなったため、[完了] ボタンを選択するとエラーが発生しました。この問題を解決するために、クラス インターフェイス内にメンバー変数を作成しました。

UIReferenceLibraryViewController *reference;

次に、retain を使用してプロパティを作成しました。

@property (retain) UIReferenceLibraryViewController *reference;

辞書画面を表示したいときのメソッドでは、次を使用しました。

reference = [[UIReferenceLibraryViewController alloc] initWithTerm:cell.textLabel.text];
[[[CCDirector sharedDirector] openGLView] addSubview:reference.view];

次に、dealloc メソッドで参照オブジェクトを解放しました。残念ながら、クラッシュはしなくなりましたが、[完了] ボタンは何もしません。

追加情報: 最終的に、アプリケーションが動作するようになりました。私のアプリは、CCScene に UITableView を追加し、ユーザーがテーブル ビュー セルをクリックして、セル内の単語の定義を検索できるようにします。

これを機能させるために、私は次のことを行いました: CCScene クラス (Game.m) 内で、UITableView を作成します。次に、UITableViewController クラスを作成し、UITableView dataSource を設定して、その新しいクラスにデリゲートします。

myTableView.dataSource = myWordListViewController;
myTableView.delegate = myWordListViewController;

次に、次のように UITableView を CCScene のサブビューとして追加します。

[[[CCDirector sharedDirector] openGLView] addSubview:myTableView];

CCScene クラスには、AppDelegate クラスのインスタンスであるメンバー変数 (デリゲートと呼ばれる) があります。AppDelegate クラスには、RootViewController のインスタンスであるメンバー変数があります。

RootViewController  *viewController;

これで、UITableView が (CCScene の上に) ユーザーに提示されました。このテーブル ビューには、単語のリストが含まれています。ここで、テーブル ビューのセルをクリックしたときに辞書の定義が表示されるようにする必要があります。

MyWordListViewController (UITableViewController) で、このクラスがデータ ソースとして機能し、テーブル ビューのデリゲートを実行できるようにするメソッドが存在することを確認します。

<UITableViewDelegate, UITableViewDataSource>

また、ユーザーが UITableView (CCSCENE のサブビュー) のセルをクリックすると、辞書がテーブル ビューの上に表示されるようにします。

MyWordListViewController の didSelectRowAtIndexPath メソッドでユーザーのクリックに応答しています。テーブル ビューを CCScene (Game.m) のサブビューとして追加したので、CCScene が依存している AppDelegate RootViewController を使用する必要があります。

これを行うために、AppDelegate クラスのインスタンスを保持するメンバー変数を MyWordListViewController に追加しました。

delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];

MyWordListViewController の didSelectRowAtIndexPath メソッドで、AppDelegate クラス内の RootViewController 変数に依存して、テーブル ビュー上に辞書を表示できます。

reference = [[UIReferenceLibraryViewController alloc] initWithTerm:cell.textLabel.text];

[delegate.viewController presentModalViewController:reference animated:YES];

それは最も雄弁な解決策ではないかもしれませんが、うまくいきます。

于 2012-10-04T22:04:26.720 に答える