2013-07-23 2 views
2

У меня есть два контроллера вида, TypeViewController и FavoritesViewController, TypeViewController состоит из типа, который может быть Избраным путем нажатия UIBarButtonItem. Нажатие кнопки сохраняет тип в массиве и сохраняет этот массив в файл. FavoritesViewController открывает этот файл и использует его массив для заполнения UITableView, который я делаю в его методе ViewDidLoad, а затем в конце я добавляю [self.tableView reloadData], чтобы убедиться, что tableView будет заполнен. Тем не менее, я заметил, когда я пытаюсь не любить тип (снова нажав UIBarButtonItem), он не будет удален из tableView. Я понятия не имею, как я должен это делать! Как удалить ячейку tableView? Любой вход был бы очень благодарен, и, пожалуйста, дайте мне знать, если мне нужно предоставить какие-либо другие детали! Благодаря = DУдаление ячейки из UITableView с другой UIViewController


Вот код:

От 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]; 
} 
+0

Вы удалили этот тип в массиве? –

+0

да! и я переписал его в файл после того, как я удалил его. Я забыл добавить, если я закрою свое приложение, а затем снова запустил его на xcode или полностью остановил его процесс, он обновит таблицу, но я хочу, чтобы он сразу же обновил таблицу. –

+2

показать код, чтобы кто-то может показать вам, где проблема? –

ответ

0

Я пытался в deleteRowsAtIndexPath, но она постоянно дает мне ошибку, я не понял, но я нашел исправить, и это было очень легко. Все, что мне нужно было сделать, это инициализировать массив self.favoritedTypesInfo в FavoritesViewController в viewWillLoad вместо viewDidLoad. Таким образом, массив будет продолжать инициализацию без объектов, и все объекты, которые в настоящее время находятся в массиве, который сохраняется в файле, будут помещены в массив self.favoritedTypesInfo.

Спасибо за помощь всем!

0

Я думаю, что вам не хватает в том, что вам нужно отправьте сообщение в таблицуView, чтобы фактически удалить строку. Похоже, вы удаляете данные из массива, но не указываете tableView, который уже загрузил данные, чтобы удалить соответствующую строку.

Используйте этот метод в своем контроллере TableView.

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
Смежные вопросы