滚动表视图时出现问题

时间:2011-05-13 01:51:52

标签: iphone ios uitableview

滚动表格视图时出现以下问题:

NSCFString objectAtIndex:]: unrecognized selector sent to instance

我创建了NSDictionary tableContents,当我滚动它时会被取消分配。 这是我的代码:

- (void)viewDidLoad {

lessonsInGroup1 = [NSMutableArray array];
lessonsInGroup2 = [NSMutableArray array];
lessonsInGroup1 = [self grabRowsInGroup:@"1"];
lessonsInGroup2 = [self grabRowsInGroup:@"2"];

NSDictionary *temp =[[NSDictionary alloc]initWithObjectsAndKeys:lessonsInGroup1,@"General Information",lessonsInGroup2,@"LaTeX Examples", nil];
//[[tableContents alloc] init];
self.tableContents =temp;
[temp release];
NSLog(@"table %@",self.tableContents);
NSLog(@"table with Keys %@",[self.tableContents allKeys]);

self.sortedKeys =[[self.tableContents allKeys] sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"sorted %@",self.sortedKeys);

[lessonsInGroup1 release];
[lessonsInGroup2 release];

//[table reloadData];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;

[super viewDidLoad];

}

- (NSMutableArray *) grabRowsInGroup:(NSString*)GroupID{

NSMutableArray *groupOfLessons; 
groupOfLessons = [[NSMutableArray alloc] init];
char *sqlStatement;
int returnCode;
sqlite3_stmt *statement;
NSString *databaseName;
NSString *databasePath;

// Setup some globals
databaseName = @"TexDatabase.sql";

// 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];

// Setup the database object
sqlite3 *database;

// Open the database from the users filessytem
if(sqlite3_open([databasePath UTF8String], &database) != SQLITE_OK) {
    fprintf(stderr, "Error in opening the database. Error: %s",
            sqlite3_errmsg(database));
    sqlite3_close(database);
    return;
}
sqlStatement = sqlite3_mprintf(
                               "SELECT * FROM Lessons WHERE LessonGroup = '%s';", [GroupID UTF8String]);

returnCode =
sqlite3_prepare_v2(database,
                   sqlStatement, strlen(sqlStatement),
                   &statement, NULL);
if(returnCode != SQLITE_OK) {
    fprintf(stderr, "Error in preparation of query. Error: %s",
            sqlite3_errmsg(database));
    sqlite3_close(database);
    return;
}
returnCode = sqlite3_step(statement);
while(returnCode == SQLITE_ROW) {

    NSString *aLessonID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
    NSString *aLessonGroup = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
    NSString *aLessonTopic = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];
    NSString *aLessonText = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
    NSString *aLessonCode = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 4)];
    NSString *aLessonPicture = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 5)];

    /*NSLog(aLessonID);
    NSLog(aLessonGroup);
    NSLog(aLessonTopic);
    NSLog(aLessonText);
    NSLog(aLessonCode);
    NSLog(aLessonPicture);*/

    // Create a new busCit object with the data from the database
    Lesson *lesson = [[Lesson alloc] initWithLessonID:aLessonID LessonGroup:aLessonGroup LessonTopic:aLessonTopic LessonText:aLessonText LessonCode:aLessonCode LessonPicture:aLessonPicture];

    [groupOfLessons addObject:lesson];

    returnCode = sqlite3_step(statement);
}
sqlite3_finalize(statement);
sqlite3_free(sqlStatement);

return [groupOfLessons autorelease];

}

2 个答案:

答案 0 :(得分:0)

你的@ofperty for tableofContents是什么样的?

此外,您将遇到

的问题
[lessonsInGroup1 release];
[lessonsInGroup2 release];

因为您正在自动释放grabRowsInGroup中的那些:

因此,您无需致电释放它们。

答案 1 :(得分:0)

看起来你在NSString上调用objectAtIndex。它应该是一些数组