2

解析して値を保存する NSDictionary があります。に値を割り当てて保存しています-viewDidLoad。の値にアクセスします-viewWillAppear。それは完全にうまく機能します。

それから、私は持っUIPageControlていUIScrollViewます。をスクロールしている間UIScrollView、再び同じ辞書にアクセスしていますが、クラッシュして

[CFString respondToSelector:]: send to deallocated....

- (void) viewDidLoad {

    [super viewDidLoad];
    scoresDict = [[NSDictionary alloc] initWithDictionary:[scoreObj scores]];
}

- (void)loadScrollViewWithPage:(int)page {

    if (page < 0) 

        return;

    if (page >= kNumberOfPages)

    return;

    NSLog(@“scoresDict %@”,scoresDict);
}

同じ関数で使用retainしてみましたが、うまくいきませんでした。そしてcopy、それもうまくいきませんでした。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

そうは言いませんが、これらのメソッドはすべて、カスタムUIViewControllerまたはUIScrollViewControllerサブクラスのインスタンスから呼び出されているようです。

最も可能性の高い問題は、このインスタンス自体が保持されていないことです。

ペン先からビューを最初にロードすると、-viewDidLoadと-viewWillAppearの両方が呼び出されます。ただし、これらの呼び出しと-loadScrollViewWithPageの呼び出しの間にガベージコレクションが発生している可能性があり、ビューコントローラーインスタンス自体に接続しているオブジェクトがない可能性があります。

その場合、scoresDictでコピーまたは保持を使用しても問題は解決しません。ViewControllerインスタンス自体をコピーまたは保持していることを確認する必要があります。ビューコントローラを保持する必要があるオブジェクトを特定し、それが保持されていることを確認します。

これが問題であるかどうかをテストする簡単な方法:アプリケーションデリゲートに「myViewController」プロパティを作成します。viewDidLoadで、次の行を追加します。

[[[UIApplication sharedApplication] delegate] setMyViewController:self];

これで問題が解決した場合は、ViewControllerが解放されたことが問題であることを意味します。ただし、これが最善の解決策であるとは限りません。これは単なる診断です。ビューコントローラを保持する必要があるものを把握し、保持することを確認する必要があります。

于 2012-11-05T18:25:15.477 に答える