//

Meerdere arrays uit SQLite DB

Meerdere arrays uit SQLite DB discussie in Ontwikkelen voor iOS forum; ( verdwijnt na registratie ) Ola! Een nieuwe app die ik aan het maken ben leest gegevens uit een SQLite database en moet deze in een tableview tonen. Nu bestaat ...



Ga terug   iPhone, iPod touch, iPad en Apple TV forum > Development > Ontwikkelen voor iOS
Wachtwoord vergeten? Registreren!
Registreer FAQ Ledenlijst Kalender Berichten van vandaag

Reageren

 

Discussietools Weergave
  #1  
Oud 30-04-11, 11:08
DJ14 DJ14 is offline
• iOS 7.1
• 4.3.5
• Besturingssysteem: Mac OS X
 
Geregistreerd: Feb 2010
Berichten: 121
Standaard Meerdere arrays uit SQLite DB

Ola!

Een nieuwe app die ik aan het maken ben leest gegevens uit een SQLite database en moet deze in een tableview tonen. Nu bestaat de database uit een aantal rijen, met per rij 6 kolommen. Nu wil ik dat als een kolom in een rij de string "Nederland" bevat, deze rij wordt toegevoegd aan de array "arrayNederland", en dat als een kolom in een rij de string "Spanje" bevat, deze rij wordt toegevoegd aan de array "arraySpanje", etc. De gegevens worden dus uit de database gehaald en gesorteerd op land, zoals een specifieke kolom dat aangeeft. De vraag is alleen hoe doe ik dit? Vervolgens wordt er per section een verschillende array gebruikt in de tableview, maar dit is eenvoudig. Tot zover werkt het prima met het lezen van de data uit de database, alleen het sorteren moet nog komen.

Samengevat:
1) pak alle rijen
2) lees 2e kolom van elke rij
3) ALS 2e kolom "Nederland" bevat, voeg de rij waar deze kolom in staat dan toe aan de array "arrayNederland"

Tot zover heb ik deze code voor het lezen van de data:

Code:
-(void)readDataFromDatabase {
	// Setup the database object
	sqlite3 *database;
	
	// Init the animals Array
	dataobjects = [[NSMutableArray alloc] init];
	
	// Open the database from the users filessytem
	if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
		// Setup the SQL Statement and compile it for faster access
		const char *sqlStatement = "SELECT * FROM premium";
		sqlite3_stmt *compiledStatement;
		if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
			// Loop through the results and add them to the feeds array
			while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
				// Read the data from the result row
				NSString *aCity = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
				NSString *aState = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
				NSString *aStreet = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
				NSString *aZipcode = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)];
				NSString *aPhonenumber = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)];
				NSString *aDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)];
				
				// Create a new data object with the data from the database
				DataObj *dataobj = [[DataObj alloc] initWithName:aCity state:aState street:aStreet zipcode:aZipcode phonenumber:aPhonenumber description:aDescription];
				
				// Add the data object to the data Array
				
				
				[dataobjects addObject:outlet];
				
				[dataobjects release];
			}
		}
		// Release the compiled statement from memory
		sqlite3_finalize(compiledStatement);
		
	}
	sqlite3_close(database);
	
}

Laatst gewijzigd door DJ14; 30-04-11 om 11:25.
Advertentie
Advertentie Gesponsorde links (verdwijnt na registratie)

  #2  
Oud 01-05-11, 10:42
DJ14 DJ14 is offline
• iOS 7.1
• 4.3.5
• Besturingssysteem: Mac OS X
 
Geregistreerd: Feb 2010
Berichten: 121
Standaard

Aangezien het haast heeft doe ik het nu op een iets andere manier (naar mijn idee is deze manier slechter omdat het aantal rijen telkens handmatig moet worden ingesteld bij verandering van aantal rijen in tableview). Wat ik nu heb is de volgende SQL query waardoor alles al gesorteerd wordt op land:

Code:
const char *sqlStatement = "SELECT * FROM premium ORDER BY state ASC";
Maar nu het volgende: hoe splits ik 1 enkele array in meerdere secties in een tableview? Alvast bedankt.
  #3  
Oud 01-05-11, 17:21
DJ14 DJ14 is offline
• iOS 7.1
• 4.3.5
• Besturingssysteem: Mac OS X
 
Geregistreerd: Feb 2010
Berichten: 121
Standaard

lol, het is me gelukt een enkele array te splitsen in een tableview door onderstaand te doen:

Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.section == 0){
		DataObject *data1 = (DataObject *)[appDelegate.array objectAtIndex:indexPath.row];
		cell.textLabel.text = data1.name;
	}
	if(indexPath.section == 1){
		DataObject *data2 = (DataObject *)[appDelegate.array objectAtIndex:indexPath.row + 10];
		cell.textLabel.text = data2.name;
	}
	if(indexPath.section == 2){
		DataObject *data3 = (DataObject *)[appDelegate.array objectAtIndex:indexPath.row + 11];
		cell.textLabel.text = data3.name;
	}

// en zo de hele tijd verder
	return cell;
}
Nu heb ik een functie geschreven die de SQL database afleest en het aantal keer dat een rij met "Nederland" voorkomt, het aantal keer dat een rij met "Spanje" voorkomt, etc. Dit werkt prima, een klein stukje van die functie hieronder (deze functie staat in de appdelegate):

Code:
- (int)getCountryCount:(NSString*)hetLand
{
    int count = 0;
	
//hier de database uitlezen met sql query in vorige post
	
	//NSLog(@"num = %i", count);

    return count;
}
Nu wil ik vanuit de AppDelegate het resultaat van de getCountryCount code doorgeven naar de class met de uitableview. Dat doe ik als volgt (onderstaande code staat in de didFinishLaunchingWithOptions methode van de appdelegate:

Code:
ClassMetTableView *cmtv = [[ClassMetTableView alloc] init];
	int nederlandCount = [[self performSelector:@selector(getCountryCount:) withObject:@"Nederland"] intValue];
	[cmtv setCountryCount:nederlandCount];
	int duitslandCount = [[self performSelector:@selector(getCountryCount:) withObject:@"Duitsland"] intValue];
	[cmtv setDuitslandCount:duitslandCountCount];
	int spanjeCount = [[self performSelector:@selector(getCountryCount:) withObject:@"Spanje"] intValue];
	[cmtv setSpanjeCount:spanjeCount];
Verder zijn de variabelen die zich in de ClassMetTableView bevinden gedeclareerd in ClassMetTableView.h op de volgende manier:

Code:
@interface ClassMetTableView : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
	
	NSInteger NederlandCount;
	NSInteger DuitslandCount;
	NSInteger SpanjeCount;
}
@property (nonatomic, assign) NSInteger CaliforniaCount;
@property (nonatomic, assign) NSInteger ConnecticutCount;
@property (nonatomic, assign) NSInteger FloridaCount;
En in ClassMetTableView.m:

Code:
@synthesize NederlandCount, DuitslandCount, SpanjeCount;
En verder nog in ClassMetTableView.m:
Code:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

	if(section == 0)
	return NederlandCount;
	if(section == 1)
	return DuitslandCount;
	if(section == 2)
	return SpanjeCount;
	// etc;
}
Het probleem is nu alleen dat de app crasht zodra deze opstart (hij start niet eens op). In de Console wordt geen melding gemaakt van de crash, ik denk dat er ergens iets niet goed gaat met het geheugen. Iemand die me verder kan helpen? Alvast bedankt!

Laatst gewijzigd door DJ14; 01-05-11 om 17:55.
  #4  
Oud 02-05-11, 10:05
DJ14 DJ14 is offline
• iOS 7.1
• 4.3.5
• Besturingssysteem: Mac OS X
 
Geregistreerd: Feb 2010
Berichten: 121
Standaard

Opgelost, getCountryCount functie verplaatst naar ClassMetTableView.m. Gelijk verdwenen hiermee een hoop waarschuwingen
Reageren



Er zijn 1 actieve gebruikers die momenteel deze discussie bekijken (0 leden en 1 gasten)

 

Soortgelijke discussies

Discussie Auteur Forum Reacties Laatste bericht
iphone 4 synchronisen met meerdere google agenda's zonder uit te loggen namastee iTunes 2 25-09-10 22:54
Applicaties kopen uit meerdere Appstores phonefreak Archief 1 08-06-09 08:21
SQLite Discussie markvwijnen Ontwikkelen voor iOS 3 01-06-09 15:08

Regels voor berichten
Je mag geen nieuwe discussies starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit
Trackbacks are Aan
Pingbacks are Aan
Refbacks are Uit



Alle tijden zijn GMT +2. Het is nu 10:32.