Использование stringWithFormat для настройки запроса - PullRequest
0 голосов
/ 05 октября 2011

Не совсем уверен, почему это не работает.

sqlite3 *db;
sqlite3_open([databasePath UTF8String], &db);
NSString *query;

NSNumber *start = (*cur_page * 50) - 50;

query = [NSString stringWithFormat:@"SELECT rest_db.rest_id, rest_db.name, prices.value FROM rest_db JOIN prices ON rest_db.rest_id = prices.table_id WHERE prices.table_name = 'rest_db'  ORDER BY rest_db.name ASC %d Limit 50;", start];

Ранее код выглядел следующим образом:

sqlite3 *db;
sqlite3_open([databasePath UTF8String], &db);
NSString *query;

query = @"SELECT rest_db.rest_id, rest_db.name, prices.value FROM rest_db JOIN prices ON rest_db.rest_id = prices.table_id WHERE prices.table_name = 'rest_db'  ORDER BY rest_db.name ASC";

, который работал просто отлично.Я попытался установить начало как:

int start
int *start
NSString *start

и, конечно, я изменил "% d" соответственно для строки.Все безрезультатно.Я не знаю, на данный момент.Программа падает, когда я попал на эту страницу сейчас.Без ошибок, не могу ничего написать с помощью NSLog.

Я также пытался использовать:

[NSString alloc] initWithFormat

Есть идеи?Они ценятся.Спасибо.

----------------------------- РЕДАКТИРОВАТЬ ----------------------------

.h

int page_count;
int cur_page;

@property int page_count;
@property int cur_page;


.m

@synthesize page_count;
@synthesize cur_page;

int start = (cur_page * 50) - 50;

query = [NSString stringWithFormat:@"SELECT rest_db.rest_id, rest_db.name, prices.value FROM rest_db JOIN prices ON rest_db.rest_id = prices.table_id WHERE prices.table_name = 'rest_db'  ORDER BY rest_db.name ASC %d Limit 50;", start];

А теперь, так как я исправил приведение типа благодаря одному из предыдущих предложений, он нене приводит к сбою программы, но не показывает данные из запроса как start = 0. Что, когда я просматриваю свой код, в точности соответствует его значению, и если бы у меня был правильно настроен оператор sqlite, я бы увидел, что ставлюэто в предел в неправильном месте ... -.- Таким образом, первоначальная проблема типографской передачи была сбоем и единственной проблемой, казалось бы.

Ответы [ 2 ]

0 голосов
/ 05 октября 2011

Я подозреваю, что NSNumber *start = (*cur_page * 50) - 50; вычисляет целочисленное значение, а затем присваивает это значение int указателю start, создавая недопустимый указатель.start должен быть объявлен как int или NSInteger.

0 голосов
/ 05 октября 2011

Попробуйте использовать% @ вместо% d. % d для целых чисел; NSNumber является объектом target-c.

Также вместо

NSNumber *start = (*cur_page * 50) - 50;

попробовать

NSNumber *start = [NSNumber numberWithInt:([cur_page intValue] * 50) - 50];

Предполагается, что cur_page имеет тип NSNumber *.

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsnumber_Class/Reference/Reference.html

...