Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
petrovichtim
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 26
#1

Обновление UITableView после изменеия массива - Программирование iOS

09.03.2014, 11:39. Просмотров 833. Ответов 2
Метки нет (Все метки)

Добрый день дорогие товарищи!
Помогите пожалуста новичку разобраться с обновлением таблицы.
В начале работы получаю массив из базы данных и отображаю его в таблице, потом делаю поиск по БД и обновляю массив, но таблица никак не хочет обновляться.
Вот ViewController.h
Objective-C
1
2
3
4
5
6
7
8
#import <UIKit/UIKit.h>
 
@interface ViewController : UIViewController
{   
    NSMutableArray *_items;
}
 
@end
Вот ViewController.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
implementation ViewController
 
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self loadItems:NULL];
}
 
- (void)viewDidUnload
{
    [super viewDidUnload];
    [_items release];
}
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
    [self loadItems:searchBar.text];
    [self.view endEditing:YES];
}
 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_items count];
}
 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //для возврата ячейки мы используем один ее экземпляр, если он не создан, создадим
    //здесь "Cell" это придуманный нами для повторного использования идентификатор ячейки
    NSString *cellIdentifier = @"Cell";
   // NSString *cellIdentifierBur= @"CellBur";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    
    if (cell == nil)
    {
        //здесь можно не просто создать ячейку, можно добавить в нее даже картинки
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier] autorelease];
    }
    
    //в indexPath.row нам передают номер строчки для отображения
    tr_word *item = [_items objectAtIndex:indexPath.row];
    //NSString *item = [_items objectAtIndex:indexPath.row];
    //мы же в label выведем название животного
    cell.textLabel.text = item.rus_word;
    cell.detailTextLabel.text = item.bur_word;
    return cell;
}
 
 
- (void)loadItems:(NSString*) sTemp
{
    //определяем путь к файлу с базой
    NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.db"];
    //создаем подключение к базе
    FMDatabase *database;
    database = [FMDatabase databaseWithPath:path];
    database.traceExecution = true; //выводит подробный лог запросов в консоль
    [database open];
    
    if (sTemp==NULL){
        _items = [[NSMutableArray alloc] init];
 
    //выполняем выборку из таблицы words
    FMResultSet *results = [database executeQuery:@"select * from words order by rus_word"];
    while([results next]) {
        
        tr_word *tr_words =[[tr_word alloc] init];
        tr_words.rus_word=[results stringForColumn:@"rus_word"];
        tr_words.bur_word=[results stringForColumn:@"bur_word"];
        [_items addObject:tr_words];
        
        //1NSString *name = [results stringForColumn:@"rus_word"];
        //atIndex - текущее кол-во элементов, чтобы новый элемент добавлялся в конец списка
       //1 [_items insertObject:name atIndex:[_items count]];
    }}
    else{
        
        FMResultSet *results = [database executeQuery:[NSString stringWithFormat:@"SELECT count(*) as cnt FROM words WHERE rus_word like '%@%%'", sTemp]];
        int *number_row = 0;
        [results next];
        number_row = [results intForColumn:@"cnt"];
        
        if(number_row ==0){
        // сделать тоаст  не нашел
        }
            else{
                FMResultSet *results = [database executeQuery:[NSString stringWithFormat:@"SELECT * FROM words WHERE rus_word like '%@%%'", sTemp]];
                _items = [[NSMutableArray alloc] init];
                while([results next]) {
                tr_word *tr_words =[[tr_word alloc] init];
                tr_words.rus_word=[results stringForColumn:@"rus_word"];
                tr_words.bur_word=[results stringForColumn:@"bur_word"];
                [_items addObject:tr_words];}
               }
    }
    
    //удаляем подключение к базе
    [database close];
}
 
@end
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 11:39     Обновление UITableView после изменеия массива
Посмотрите здесь:
Удаление ячеек после последней секции в UITableView
Сортировка в UITableView
Несуществующий UITableView
UITableView Section Objective-C
Swift Передать из UITableView в UIWebView
UITableView & UIButton
Работа с жестами в UITableView
UITableView запутался с вьюхой
UISearchBar & UITableView
Индексация ячеек в UITableView
Objective-C UITableView - footer не уходит за экран
Особенности при работе с UITableView

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
09.03.2014, 11:50     Обновление UITableView после изменеия массива #2
В searchBarSearchButtonClicked одну строчку добавьте.
[tableView reloadData];
Ну или как там у вас оутлет для таблицы называется.
petrovichtim
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 26
09.03.2014, 12:56  [ТС]     Обновление UITableView после изменеия массива #3
Спасибо но прямо так
Objective-C
1
[tableView reloadData];
ругается, а где можно посмотреть как он у меня называется?

Добавлено через 17 минут
Делал приложение по вот этой статье

Добавлено через 42 минуты
Спасибо, победил!
Добавил 2 строчки
Objective-C
1
2
3
4
5
6
7
8
9
#import <UIKit/UIKit.h>
 
@interface ViewController : UIViewController
{   
    NSMutableArray *_items;
}
@property (nonatomic,retain) IBOutlet  UITableView *tableview;
 
@end
и еще сюда
Objective-C
1
2
3
4
5
6
7
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [searchBar resignFirstResponder];
    [self loadItems:searchBar.text];
    [self.view endEditing:YES];
    [self.tableview reloadData];
}
И связал в аутлетах таблицу и ее вид
Yandex
Объявления
09.03.2014, 12:56     Обновление UITableView после изменеия массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru