У меня возникли трудности с этим. У меня есть метод, который возвращает значение массива NSDictionary, когда я передаю возвращаемое значение массива сначала, когда он работает. Я уже получаю объект в своем NSLog, но когда я пытаюсь получить доступ к объектам моего массива NSDictionary в другом методе, я получаю ошибку, и я думаю, что я теряю объекты массива.Почему мой массив NSDictionary потерял свои объекты?
Вот метод, который возвращает массив NSDictionary:
-(NSMutableArray *)selectItemDataTbl {
NSMutableArray *l_array_data = [[NSMutableArray alloc] init];
NSString *query = @"SELECT pid, fname, gen_name, type, fu, fprice FROM tbl_selectItem_data";
sqlite3_stmt *l_statement;
if (sqlite3_open([l_SqliteDb UTF8String], &(_database)) == SQLITE_OK) {
if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &l_statement, nil) == SQLITE_OK) {
while(sqlite3_step(l_statement) == SQLITE_ROW){
NSMutableDictionary *l_dataDictionary = [[NSMutableDictionary alloc]init];
NSString *l_pid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 0)];
NSString *l_name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 1)];
NSString *l_genName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 2)];
NSString *l_Type = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 3)];
NSString *l_u = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 4)];
NSString *l_Price = [NSString stringWithUTF8String:(char *)sqlite3_column_text(l_statement, 5)];
[l_dataDictionary setObject:l_pid forKey:@"pid"];
[l_dataDictionary setObject:l_name forKey:@"name"];
[l_dataDictionary setObject:l_genName forKey:@"genName"];
[l_dataDictionary setObject:l_Type forKey:@"Type"];
[l_dataDictionary setObject:l_u forKey:@"u"];
[l_dataDictionary setObject:l_Price forKey:@"Price"];
[l_array_data addObject:l_dataDictionary];
}
NSLog(@"l_array_data count: %i", [l_array_data count]);
sqlite3_finalize(l_statement);
sqlite3_close(_database);
}
}
return l_array_data;
}
А вот мой метод, как я к нему доступ, я звоню на моем viewDidLoad:
- (void)selectItemData {
_l_alldataInSelectItem = [[NSMutableArray alloc] init];
_l_prodId = [[NSMutableArray alloc] init];
_l_prodName = [[NSMutableArray alloc] init];
_l_prodGenName = [[NSMutableArray alloc] init];
_l_prodCompType = [[NSMutableArray alloc] init];
_l_prodUom = [[NSMutableArray alloc] init];
_l_prodListPrice = [[NSMutableArray alloc] init];
_l_alldataInSelectItem = [dbc selectItemDataTbl];
_l_selectItemData_Dictionary = [[NSDictionary alloc] init];
for (_l_selectItemData_Dictionary in _l_alldataInSelectItem) {
NSString *Id = [_l_selectItemData_Dictionary valueForKey:@"pid"] ;
NSString *Name = [_l_selectItemData_Dictionary valueForKey:@"name"];
NSString *GenName = [_l_selectItemData_Dictionary valueForKey:@"genName"];
NSString *Type = [_l_selectItemData_Dictionary valueForKey:@"Type"];
NSString *U = [_l_selectItemData_Dictionary valueForKey:@"u"];
NSString *Price = [_l_selectItemData_Dictionary valueForKey:@"Price"];
[_l_prodId addObject:Id];
[_l_prodName addObject:Name];
[_l_prodGenName addObject:GenName];
[_l_prodCompType addObject:GenName];
[_l_prodUom addObject:U];
[_l_prodListPrice addObject:Price];
}
NSLog(@"adsfasdf %@", _l_prodId);
NSLog(@"adsfasdf %i", [_l_alldataInSelectItem count]);
}
Но в этом методе я не может получить значение моего массива _l_alldataInSelectItem
- (void)textFieldshouldChange {
NSString *searchKey = self.txt_SearchField.text;
NSMutableArray *searchingData = [[NSMutableArray alloc] init];
if (![searchKey isEqualToString:@""]) {
NSLog(@"When TextField text is changed, this will be called");
NSLog(@"textFieldshouldChange _l_alldataInSelectItem: %i", [_l_alldataInSelectItem count]);
}
}
вот как я заявляю о своем l_alldataIn Выберите предмет. Я объявил это в своем заголовочном файле
@property (strong, nonatomic) NSMutableArray *l_alldataInSelectItem, *l_prodId, *l_prodName, *l_prodGenName, *l_prodCompType, *l_prodUom, *l_prodListPrice;
Вы не даёте нам подсказки о том, как объявлен/выделен '_l_alldataInSelectItem'. –
@HotLicks Я уже редактировал сообщение – NewDroidDev
Попробуйте заменить ссылки на '_l_alldataInSelectItem' на' self.l_alldataInSelectItem'. (Затем запустите Product-> Analyze, чтобы определить проблемы управления памятью.) –