0

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

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

有任何想法吗?他们受到赞赏。谢谢。

- - - - - - - - - - - - - - - 编辑 - - - - - - - - - - --------

.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 语句,我会看到我把它放在错误的地方限制... -.- 所以最初的类型转换问题是崩溃,而且似乎是唯一的问题。

4

2 回答 2

0

尝试使用 %@ 而不是 %d。%d 用于整数;NSNumber 是一个objective-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

于 2011-10-05T15:53:56.143 回答
0

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

于 2011-10-05T16:02:47.283 回答