Как получить базу данных SQLITE (Mydb.db) для загрузки при каждом запуске приложения для iPhone? - PullRequest
0 голосов
/ 12 марта 2011

У меня есть приложение, которое при запуске обращается к статической базе данных SQLITE.Пользователю или приложению не разрешается изменять или обновлять эту базу данных.Однако мне нужно добавить записи или изменить содержимое поля, чтобы не отставать от меняющихся URL-адресов и т. Д. Я использую MesaSQLite для обновления одной таблицы.Но когда я снова открыл приложение в Xcode Simulator, ни одно из изменений не вступило в силу.Это как если бы приложение не перезагрузило обновленную базу данных.

Как я могу получить перезагрузку?Имейте в виду, что я все еще покрыта термоусадочной пленкой, потому что я так плохо знаком с кодированием !!!

Ответы [ 2 ]

0 голосов
/ 13 марта 2011

Это приложение для IOS4.2 для iPhone. Вот код для доступа и отображения результатов сортировки базы данных. Цель состоит в том, чтобы использовать базу данных для сортировки делегатов по событию и состоянию, а затем отображать результаты. Представленные делегаты связаны с веб-сайтом. Опять же, пользователь и приложение НЕ изменяют базу данных, она статична. Я использую редактор SQLite, чтобы вносить изменения и импортировать их обратно в единую таблицу базы данных. Мне просто нужно перезагрузить таблицу при запуске этой части кода.

Мне нужно знать, какой код и куда его вставить для перезагрузки таблицы.

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

//

// DelegateList.m

// foundingFathers

//

// Создано __ 6/23/10.

// Авторское право 2010 MyCompanyName . Все права защищены.

//

import "DelegateList.h"

статический sqlite3 * база данных = ноль;

@ реализация DelegateList

@ synthesize tableView;

- (Недействительными) viewDidLoad

{

nameArray = [[NSMutableArray alloc] init];

stateArray = [[NSMutableArray alloc] init];

yearsArray = [[NSMutableArray alloc] init];

contArray = [[NSMutableArray alloc] init];

indArray = [[NSMutableArray alloc] init];

confArray = [[NSMutableArray alloc] init];

constArray = [[NSMutableArray alloc] init]; 

urlArray = [[NSMutableArray alloc] init];



stateNameArray = [[NSMutableArray alloc] init];

eventNameArray = [[NSMutableArray alloc] init];



[self loadStateData];

[self loadEventData];







// Setup some globals

databaseName = @"mydb.db";



// Get the path to the documents directory and append the databaseName

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDir = [documentPaths objectAtIndex:0];

databasePath = [documentsDir stringByAppendingPathComponent:databaseName];



// Execute the "checkAndCreateDatabase" function

[self checkAndCreateDatabase];



// Query the database for all delegates

[self loadDataWithState:@"" andEvent:0];

}

- (Недействительными) loadStateData

{

[stateNameArray addObject:@"All States"];

[stateNameArray addObject:@"Connecticut"];

[stateNameArray addObject:@"Delaware"];

[stateNameArray addObject:@"Georgia"];

[stateNameArray addObject:@"Maryland"];

[stateNameArray addObject:@"Massachusetts"];

[stateNameArray addObject:@"New Hampshire"];

[stateNameArray addObject:@"New Jersey"];

[stateNameArray addObject:@"New York"];

[stateNameArray addObject:@"North Carolina"];

[stateNameArray addObject:@"Pennsylvania"];

[stateNameArray addObject:@"Rhode Island"];

[stateNameArray addObject:@"South Carolina"];

[stateNameArray addObject:@"Virginia"];

}

- (Недействительными) loadEventData

{

[eventNameArray addObject:@"All Events"];

[eventNameArray addObject:@"Continental Association"];

[eventNameArray addObject:@"Declaration of Independence"];

[eventNameArray addObject:@"Confederation of States"];

[eventNameArray addObject:@"US Constitution"];

}

- (IBAction) nextPressed: (идентификатор) отправителя

{

[self.navigationController pushViewController:nondelegateList animated:YES];

}

- (IBAction) menuPressed: (идентификатор) отправителя

{

[self.navigationController popToViewController:mainmenu animated:YES];

}

/ *

- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation

{

switch (interfaceOrientation) {

    case UIInterfaceOrientationPortrait:

    case UIInterfaceOrientationPortraitUpsideDown:

        return NO;

        break;

    default:

        return YES;

        break;

}

} * /

  • (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) раздел {

    return [nameArray count] +1;

}

- (UITableViewCell *) tableView: (UITableView *) tblView cellForRowAtIndexPath: (NSIndexPath *) indexPath {

static NSString *MyIdentifier = @"MyIdentifier";

MyIdentifier = @"tblViewCell";

TableViewCell *cell = (TableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if(cell == nil) {

    [[NSBundle mainBundle] loadNibNamed:@"TableCellView" owner:self options:nil];

    cell = tblCell;

}



UILabel* lbl;

if (indexPath.row == 0) //table Headers

{



    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];



    lbl = (UILabel *)[cell viewWithTag:1];

    [lbl setFont:[UIFont boldSystemFontOfSize:14]];

    lbl.text = @"Name";

    [lbl setTextAlignment:UITextAlignmentLeft];



    lbl = (UILabel *)[cell viewWithTag:2];

    [lbl setFont:[UIFont boldSystemFontOfSize:14]];

    lbl.text = @"State";

    [lbl setTextAlignment:UITextAlignmentLeft];



} else {

    //[lbl setFont:[[lbl font] fontWithSize:9]];

    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];





    lbl = (UILabel *)[cell viewWithTag:1];

    [lbl setTextAlignment:UITextAlignmentLeft];

    [lbl setFont:[UIFont systemFontOfSize:14]];

    lbl.text = [nameArray objectAtIndex:indexPath.row-1];



    lbl = (UILabel *)[cell viewWithTag:2];

    [lbl setTextAlignment:UITextAlignmentLeft];

    [lbl setFont:[UIFont systemFontOfSize:14]];

    lbl.text = [stateArray objectAtIndex:indexPath.row-1];



}       



return cell;

}

  • (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath

{

if (indexPath.row == 0) {

    return;

}

NSURL* page = [NSURL URLWithString:[urlArray objectAtIndex:indexPath.row - 1] ];

NSURLRequest* pageRequest = [NSURLRequest requestWithURL:page];

[webTitle setTitle:[nameArray objectAtIndex:indexPath.row - 1]];

[web loadRequest:pageRequest];

[self.navigationController pushViewController:webView animated:YES];

}

- (void) checkAndCreateDatabase {

BOOL success;



NSFileManager *fileManager = [NSFileManager defaultManager];



success = [fileManager fileExistsAtPath:databasePath];



if(success) return;



NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];



[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];



//[fileManager release];

}

- (void) loadDataWithState: (NSString *) stateSearch иEvent: (int) eventSearch

{

BOOL hasEvent = (BOOL)eventSearch;

BOOL hasState = !([stateSearch isEqualToString:@"All States"] || stateSearch.length <=0);

NSString* state = stateSearch;

NSString* event = nil;

switch (eventSearch) {

    case 1:

        event = @"continental";

        break;

    case 2:

        event = @"declaration";

        break;

    case 3:

        event = @"confederation";

        break;

    case 4:

        event = @"constitution";

        break;

    default:

        break;

}









// Open the database from the users filessytem





if(database || sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

    // Setup the SQL Statement and compile it for faster access

    NSString* sqlString = nil;

    const char *sqlStatement;

    if (hasEvent && hasState) {

        sqlString = [[[[@"select * from founding_fathers where "stringByAppendingString:event] stringByAppendingString:@" like 'X%%' and State like '"] stringByAppendingString:state] stringByAppendingString:@"'"];

    }

    if (hasEvent && !hasState) {

        sqlString = [[@"select * from founding_fathers where "  stringByAppendingString:event] stringByAppendingString:@" like 'X%%'"];

    }

    if (!hasEvent && hasState) {

        sqlString = [[@"select * from founding_fathers where state = '" stringByAppendingString:state] stringByAppendingString:@"'"];



    }

    if (!hasEvent && !hasState) {

        sqlString= @"select * from founding_fathers";

    }



    unsigned int lengthOfMessage = [sqlString length];

    char temp[lengthOfMessage + 1];

    strcpy(temp, [sqlString cString]);

    sqlStatement = temp;





    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

        [nameArray removeAllObjects];

        [stateArray removeAllObjects];

        [yearsArray removeAllObjects];

        [contArray removeAllObjects];

        [indArray removeAllObjects];

        [confArray removeAllObjects];

        [constArray removeAllObjects];

        [urlArray removeAllObjects];



        while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

            // Read the data from the result row

            NSString* dName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];

            NSString* dState = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

            NSString* dYears = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];

            NSString* dCont = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)];

            NSString* dInd = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)];

            NSString* dConf = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)];

            NSString* dConst = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 7)];

            NSString* dUrl = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 8)];





            [nameArray addObject:dName];

            [stateArray addObject:dState];

            [yearsArray addObject:dYears];

            [contArray addObject:dCont];

            [indArray addObject:dInd];

            [confArray addObject:dConf];

            [constArray addObject:dConst];

            [urlArray addObject:dUrl];



        }

    }

    // Release the compiled statement from memory

    sqlite3_finalize(compiledStatement);



}

}

- (Недействительными) viewDidUnload

{

sqlite3_close(database);

}

- (IBAction) stateSearch: (идентификатор) отправителя

{

pickerArray = stateNameArray;

[picker reloadAllComponents];

[picker setHidden:NO];

[doneButton setHidden:NO];

}

- (IBAction) eventSearch: (идентификатор) отправителя

{

pickerArray = eventNameArray;

[picker reloadAllComponents];

[picker setHidden:NO];

[doneButton setHidden:NO];

}

  • (NSInteger) pickerView: (UIPickerView *) pickerView numberOfRowsInComponent: (NSInteger) компонент

{

return [pickerArray count];

}

  • (NSInteger) numberOfComponentsInPickerView: (UIPickerView *) pickerView

{

return 1;

}

  • (NSString *) pickerView: (UIPickerView *) pickerView titleForRow: (NSInteger) строка для компонента: (NSInteger) компонент

{

return [pickerArray objectAtIndex:row];

}

  • (void) pickerView: (UIPickerView *) pickerView didSelectRow: (NSInteger) строка inComponent: (NSInteger) компонент

{

}

  • (void) doneClicked: (id) отправитель

{

if (pickerArray == stateNameArray)

{

    stateSearchChoice = [stateNameArray objectAtIndex:[picker selectedRowInComponent:0]];

    [stateButton setTitle:stateSearchChoice];

}



if (pickerArray == eventNameArray) {

    eventSearchChoice = [picker selectedRowInComponent:0];

    [eventButton setTitle:[eventNameArray objectAtIndex:[picker selectedRowInComponent:0]]];

}

[picker setHidden:YES];

[doneButton setHidden:YES];



[self loadDataWithState:stateSearchChoice andEvent:eventSearchChoice];

[tableView reloadData];

}

@ конец

0 голосов
/ 12 марта 2011

Я не совсем уверен в части SQL. но я думаю, что вам нужно будет перезагрузить содержимое таблицы после получения обновления из базы данных. Если вы отправите код, я могу помочь вам лучше. Вот как перезагрузить таблицу:

[myTable reloadData];

И вам нужно будет обновить таблицу новыми данными в

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...