6

RestKit 0.20.1 を使用して Restful Web サービスからデータを取得する iOS アプリがあります。アプリが CoreData を使用することも追加する必要があります。アプリが開始されると、メイン画面はデフォルトの検索語が入力されたコレクション ビューになります。ヘッダーには、検索バーとして使用されるテキスト フィールドもあります。

ユーザーが検索バーを使用するときに、以前に読み込まれたセルをクリアするのに問題があります。新しいセルをロードし、前のセルを押し下げるだけです。該当するコードは次のとおりです。

- (BOOL) textFieldShouldReturn:(UITextField *)textField {

//This sets up the NSDictionary for the Restkit postObject parameters
    NSArray *objects =[NSArray arrayWithObjects:textField.text, nil];
    NSArray *keys =[NSArray arrayWithObjects: @"query",nil];
    NSDictionary *params = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    self.search=params;

//This is the POST request to the server
    [[RKObjectManager sharedManager] postObject:nil path:@"/rest/search?ip=255.255.255.0" parameters:search success:nil failure:nil];

//This is what I thought would clear out the old and replace with the new    
    [self.collectionView reloadData];    

    [textField resignFirstResponder];
    return YES; 
}

この質問を参照しましたすべてのアイテムを削除して新しいアイテムをUICollectionViewに追加する方法は? そして[collectionView reloadData]受け入れられた答えでした。

このチュートリアルのtextFieldShouldReturn:方法を選択しました。また、Apple Developer Library のInserting, Deleting, and Moving Section Itemsも参照しましたが、アイテムの削除メソッドを実装する方法がよくわかりません。

どんな助けでも素晴らしいでしょう。これは明らかに初歩的な質問なので、コード スニペットは非常に役立ちます。

更新: これが私がそれを機能させる方法です。

上記のコードのメソッドとステートメントdeleteAllEntitiesForNameの前に、以下に示すメソッドへの呼び出しを追加しました。postObject[self.collectionView reloadData]

- (void) deleteAllEntitiesForName:(NSString*)entityName {
    NSManagedObjectContext *moc = [self managedObjectContext];
    NSEntityDescription *entityDescription = [NSEntityDescription
    entityForName:entityName inManagedObjectContext:moc];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDescription];
    NSError *error = nil;
    NSArray *array = [moc executeFetchRequest:request error:&error];
    if (array != nil) {
        for(NSManagedObject *managedObject in array) {
            [moc deleteObject:managedObject];
        }
        error = nil;
        [moc save:&error];
    }

}

ここから入手しました:コアデータデータベースを更新する正しい方法

4

2 に答える 2

3

UICollectionView(RestKit ではなく) の経験から、おそらく を呼び出す前にデータ ソースをクリアする必要がありますreloadData。この効果が発生する理由は、コレクション ビューのアイテムとセクションの数を決定するために使用するソースに古いデータがまだ含まれているためです。

これを確認する簡単な方法は、 を呼び出す直前にデータ ソースの内容を NSLog することreloadDataです。

お役に立てれば!

于 2013-06-26T04:32:51.843 に答える
2

使用している場合は、次のNSMutableArrayように簡単に実行できます。

[array_name removeAllObjects];

これは、配列に新しいオブジェクトを追加する前に行ってください。

于 2013-06-26T05:00:49.100 に答える