0

たとえば、私は次のようなメソッドを取得しました。

- (void)addToRecents:(NSDictionary *)photo
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSMutableArray *recents = [[defaults objectForKey:@"RecentPhotos"] mutableCopy];
    if(!recents) recents = [NSMutableArray array];
    [recents addObject:photo];
    [defaults setObject:recents forKey:@"RecentPhotos"];
    [defaults synchronize];
    self.recentPhotos = [[NSUserDefaults standardUserDefaults] objectForKey:@"RecentPhotos"];    
    [self.tableView reloadData];
}

それからそれはいつも私が望むテーブルビューを表示することができませんでした。nslogを使用して何かを出力し- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath、このメソッドが実際に呼び出されたかどうかを確認します。それから私はそれが決して呼ばれなかったことを知りました。

4

2 に答える 2

0

私はCまたはJavaでの過去の経験から上記の原因を実行しました。次のようなメソッドまたは関数でも、必要な場所で実行する限り、セットアップまたは初期化を実行する場所は重要ではないと思います。

self.recentPhotos = [[NSUserDefaults standardUserDefaults] objectForKey:@"RecentPhotos"];    
[self.tableView reloadData];

しかし、それはまったく機能しませんでした。Javaのように正しい方法でやっているといつも思っていたので、他のすべてのものをチェックしてそれを理解するのに約1時間かかりました。

次に、それらをviewDidLoad()内に配置しようとしましたが、機能しました。私は、viewControllerのライフサイクルに関するスタンフォード大学の講義をもう一度見ました。Paulが言ったように、すべてのセットアップまたは初期化はvieDidLoad()で行う方がよいでしょう。今、私はこの違いを学びます。

これは、課題4に取り組んだ私自身の経験です。

他の人がこれに多くの時間を無駄にしないのに役立つことを願っています。ありがとう

于 2012-07-06T04:03:46.743 に答える
0

私はその部分に自分で数時間を費やしました。私が役立つことを願っているいくつかのコメント:

1-実際にはNSUserDefaultsを逆方向に使用しています。画像をローカル配列に継続的に追加してから、その配列を設定に合わせてsetObjectします(NSUserDefaultsを更新してローカル配列にコピーするのではありません)。もっと論理的です。

2-コード内のリロードの場所が問題ではなかったと思います。コードでテストしたところ、正常に機能しました。何らかの理由で、IBでVCを移動しているときに、ソースとデリゲートが切断されました。だから私はそれらを再接続する必要がありました。それがあなたに起こったことなのかしら。

3-割り当てを進める際のヒント:VCをTabBarControllerに埋め込んだら、テーブルのリロードのイベントのシーケンスを考えてください:-)

KB

于 2012-07-06T18:33:33.470 に答える