2

私は 2 つのビュー コントローラーを持ってTypeViewControllerいます。ボタンを押すと、型が配列に保存され、その配列がファイルに保存されます。そのファイルを開き、その配列を使用して UITableView を設定します。これはメソッドで行います。最後に、tableView が確実に設定されるように追加します。ただし、タイプをお気に入りから外そうとすると (もう一度押すことで)、tableView から削除されないことに気付きました。これについてどうすればいいのかわかりません!tableViewセルを削除するにはどうすればよいですか?? ご意見をお寄せいただければ幸いです。他に詳細が必要な場合はお知らせください。ありがとう=DFavoritesViewControllerTypeViewControllerUIBarButtonItemFavoritesViewControllerViewDidLoad[self.tableView reloadData]UIBarButtonItem


ここにいくつかのコードがあります:

からTypeViewController:

//When The UIBarButtonItem is pressed
-(IBAction)favoriteTheSubject:(id)sender{

//Open the saved array
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *arrayFileName = [documentsDirectory stringByAppendingPathComponent:@"favoritedTypes.dat"];

NSMutableArray *favoritedTypeInfo = [[NSMutableArray alloc] initWithContentsOfFile: arrayFileName];
//If the array file does not exist, set the array
if(favoritedTypeInfo == nil)
{
    NSLog(@"Didn't exist in SecondaryDetailVC");
    favoritedTypeInfo = [[NSMutableArray alloc] init];
}
//Favorite item
if ([self.navigationItem.rightBarButtonItem.image isEqual:[UIImage imageNamed:@"FavButton.png" ]]) { //FavButton.png is the unselected favorite button
    [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"FavButtonSelected.png"]];//Change the image
     //Add the type
    [favoritedTypeInfo addObject:typeOfObject];
    [favoritedTypeInfo addObject:priceOfType];

    NSLog(@"Added Item");

    [favoritedTypeInfo writeToFile:arrayFileName atomically:YES];
} 
else{ //Unfavorite Item
    [self.navigationItem.rightBarButtonItem setImage:[UIImage imageNamed:@"FavButton.png"]];
    //Create an array to insert all the values to remove
    NSMutableArray *removeArray = [[NSMutableArray alloc]init];

    for (int i = 0; i < [favoritedTypeInfo count]; i++) {
        NSString *sameTitle =favoritedTypeInfo[i];

        if ([self.tableTitle isEqualToString:sameTitle]) {
            //Add typeOfObject and priceOfType to removeArray
            [removeArray addObject:favoritedTypeInfo[i]];
            [removeArray addObject:favoritedTypeInfo[i+1]];
            NSLog(@"Removed %@", removeArray[i]);
        }
    }
    //Remove objects
    [favoritedTypeInfo removeObjectsInArray:removeArray];
    [favoritedTypeInfo writeToFile:arrayFileName atomically:YES];
}
}

からFavoriteViewController:

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//Open the array from file
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *arrayFileName = [documentsDirectory stringByAppendingPathComponent:@"favoritedTypes.dat"];

NSMutableArray *savedArray = [[NSMutableArray alloc] initWithContentsOfFile: arrayFileName];
if(savedArray == nil)
{
    NSLog(@"Couldn't Open Favorites Array");
}else{

    for (int i = 0; i < [savedArray count]; i++) {
        if (i%2 == 0) {
            //Array for favorited typesOfObject
            [self.favoritedTypesInfo addObject:savedArray[i]];
        } else if (i%2 == 1){
            //Array for favorited priceOftypes
            [self.favoritedPriceTypes addObject:savedArray[i]];
        }
    }

    //Test to see if there are duplicate objects in arrays
    int countFavorited = 0;
    for (int i = 0; i < [self.favoritedTypesInfo count]; i++) {
        for (int k = 0; k < [self.favoritedTypesInfo count]; k++) {
            NSString *kString = [self.favoritedTypesInfo objectAtIndex:k];
            NSString *iString = [self.favoritedTypesInfo objectAtIndex:i];
            if ([kString isEqualToString:iString] && kString.length == iString.length) {
                NSLog(@"%@ : %@", kString, iString);
                countFavorited += 1;
                if (countFavorited > 1) {
                    [self.favoritedTypesInfo removeObjectAtIndex:k];
                    [self.favoritedPriceTypes removeObjectAtIndex:k];
                    countFavorited = 0;
                }
            }
        }
    }
}

[self.tableView reloadData];
}
4

2 に答える 2

0

行を実際に削除するには、tableView にメッセージを送信する必要があると思います。配列からデータを削除しているように見えますが、既にデータをロードしている tableView に対応する行を削除するように指示していません。

tableView Controller でこのメソッドを使用します。

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
于 2013-07-26T13:43:01.253 に答える
0

私はdeleteRowsAtIndexPathを試していましたが、理解できないエラーが常に表示されましたが、修正が見つかり、非常に簡単でした. 私がしなければならなかったのは、 in ではなく in で配列を初期化することだけでしself.favoritedTypesInfoた。このように、配列はオブジェクトなしで初期化を続け、ファイルに保存されている現在配列にあるすべてのオブジェクトが配列に配置されます。FavoritesViewControllerviewWillLoadviewDidLoadself.favoritedTypesInfo

みんな助けてくれてありがとう!

于 2013-08-01T09:19:02.263 に答える