使用stringWithFormat进行查询设置

时间:2011-10-05 15:51:27

标签: iphone objective-c xcode stringwithformat

不完全确定为什么这不起作用。

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";

哪个工作得很好。我尝试将start设置为:

int start
int *start
NSString *start

当然我为字符串相应地更改了“%d”。一切都无济于事。我此刻毫无头绪。我现在点击此页面时程序崩溃了。没有错误,无法使用NSLog编写任何内容。

我也尝试过使用:

[NSString alloc] initWithFormat

有什么想法吗?他们很感激。感谢。

  

----------------------------- EDIT ----------------- -----------

.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 :(得分:0)

尝试使用%@代替%d。 %d代表整数; NSNumber是一个客观的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

答案 1 :(得分:0)

我怀疑NSNumber *start = (*cur_page * 50) - 50;正在计算整数值,然后将该int值分配给指针start,从而产生无效指针。 start应声明为intNSInteger