Iphone 在数组中存储对象
我正在处理一个数据库,并试图将表中的行作为字典存储在数组中Iphone 在数组中存储对象,iphone,objective-c,database,sqlite,nsmutablearray,Iphone,Objective C,Database,Sqlite,Nsmutablearray,我正在处理一个数据库,并试图将表中的行作为字典存储在数组中 #import "RootViewController.h" #import "ProgettoAppDelegate.h" #import "AddItemViewController.h" #import "DetailViewController.h" #include <sqlite3.h> @implementation RootViewController @synthesize nibLoadedCell;
#import "RootViewController.h"
#import "ProgettoAppDelegate.h"
#import "AddItemViewController.h"
#import "DetailViewController.h"
#include <sqlite3.h>
@implementation RootViewController
@synthesize nibLoadedCell;
@synthesize addItem;
NSNumberFormatter *priceFormatter;
NSDateFormatter *dateFormatter;
NSMutableArray *shoppingListItems; <--i created here...
NSDictionary *editItem;
-(void) loadDataFromDb {
//apriamo il database
sqlite3 *db;
int dbrc; //Codice di ritorno del database (database return code)
ProgettoAppDelegate *appDelegate = (ProgettoAppDelegate *) [UIApplication sharedApplication].delegate;
const char *dbFilePathUTF8 = [appDelegate.dbFilePath UTF8String];
dbrc = sqlite3_open(dbFilePathUTF8, &db);
if (dbrc) {
NSLog(@"Impossibile aprire il Database!");
return;
}
//database aperto! Prendiamo i valori dal database.
sqlite3_stmt *dbps; //Istruzione di preparazione del database
NSString *queryStatementNS = @"select key, item, price, groupid, dateadded from shoppinglist order by item";
const char *queryStatement = [queryStatementNS UTF8String];
dbrc = sqlite3_prepare_v2(db, queryStatement, -1, &dbps, NULL);
//Richiamo la funzione sqlite3_step() finché ho righe nel database
while ((dbrc = sqlite3_step(dbps)) == SQLITE_ROW) {
int primaryKeyValueI = sqlite3_column_int(dbps, 0);
NSNumber *primaryKeyValue = [[NSNumber alloc] initWithInt:primaryKeyValueI];
NSString *itemValue = [[NSString alloc] initWithUTF8String:(char*) sqlite3_column_text(dbps, 1)];
double priceValueD = sqlite3_column_double(dbps, 2);
NSNumber *priceValue = [[NSNumber alloc] initWithDouble:priceValueD];
int groupValueI = sqlite3_column_int(dbps, 3);
NSNumber *groupValue = [[NSNumber alloc] initWithInt:groupValueI];
NSString *dateValueS = [[NSString alloc] initWithUTF8String:(char*) sqlite3_column_text(dbps, 4)];
NSDate *dateValue = [dateFormatter dateFromString: dateValueS];
NSMutableDictionary *rowDict = [[NSMutableDictionary alloc] initWithCapacity:5];
[rowDict setObject:primaryKeyValue forKey: ID_KEY];
[rowDict setObject:itemValue forKey: ITEM_KEY];
[rowDict setObject:priceValue forKey: PRICE_KEY];
[rowDict setObject:groupValue forKey: GROUP_ID_KEY];
[rowDict setObject:dateValue forKey: DATE_ADDED_KEY];
[shoppingListItems addObject: rowDict];
NSLog(@"%d", [shoppingListItems count]); //I have a Breakpoint here!
//rilascio tutti gli elementi
[dateValue release];
[primaryKeyValue release];
[itemValue release];
[priceValue release];
[groupValue release];
[rowDict release];
}
}
#导入“RootViewController.h”
#导入“ProgettoAppDelegate.h”
#导入“AddItemViewController.h”
#导入“DetailViewController.h”
#包括
@RootViewController的实现
@合成负载型细胞;
@合成添加剂;
NSNumberFormatter*价格格式化程序;
NSDateFormatter*日期格式化程序;
NSMutableArray*shoppingListItems 听起来好像您从来没有实际创建要放入shoppingListItems
中的数组,因此它是零。您没有显示shoppingListItems的定义,但添加到数组时有两个常见问题:
该数组是NSArray,而不是必须的NSMutableArray
数组为零-您可能使用[NSMUTABLEARRY array]创建了它,但没有显式保留
是的,检查了你的代码-你从来没有初始化过它。解决了这个问题,您应该会没事。我在上面的代码中没有看到创建数组的任何内容。如果shoppingListItems
为nil,那么那些-addObject:
消息将不起任何作用。您需要将所有变量声明为实例变量,我的意思是在.h文件中,如下所示
// .h
@interface RootViewController : UITableViewController {
UITableViewCell *nibLoadedCell;
AddItemViewController *addItem;
IBOutlet UITableView *tableView;
NSNumberFormatter *priceFormatter;
NSDateFormatter *dateFormatter;
NSMutableArray *shoppingListItems; // <--- this is only a declaration (not creates the object)
NSDictionary *editItem;
}
/.h
@接口RootViewController:UITableViewController{
UITableViewCell*nibLoadedCell;
AddItemViewController*addItem;
IBUITableView*表格视图;
NSNumberFormatter*价格格式化程序;
NSDateFormatter*日期格式化程序;
NSMutableArray*shoppingListItems;//该数组是在顶部创建的NSMutableArray#包括@implementation RootViewController@synthesis nibloaddedcell;@synthesis addItem;NSNumberFormatter*priceFormatter;NSDateFormatter*dateFormatter;NSMutableArray*shoppingListItems;
…它是可变的,我创建为NSMutableArray*shoppingListItems;
您定义了它,但没有创建它。直到您为该指针分配了某些内容(如shoppingListItems=[[NSMutableArray]retain])它是nil和addObject,作为给nil的一条消息,它不会做任何事情。我创建了!我在另一个项目中使用了这段代码,做了同样的事情,但在另一个项目中工作正常,这里我有一个奇怪的问题…和的可能重复
- (void)viewDidLoad
{
[super viewDidLoad];
shoppingListItems = [NSMutableArray new]; // <---- This create the object
// other initialization ....
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[dateFormatter setDateFormat:@"yyy-MM-dd HH:mm:ss"];
}
if (! priceFormatter) {
priceFormatter = [[NSNumberFormatter alloc] init];
[priceFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
}
self.navigationItem.leftBarButtonItem = self.editButtonItem;
}