2012-01-02 63 views
0

我有一个应用程序,我需要在一个页面中保存提醒,并在其他显示保存的提醒。我已经成功地使用sqlite3!如何根据选择器视图中选择的行组件更新表视图数据

在视图提示页面中,用户将有3个选项可供查看,查看我已经实现的所有视图组,包含4组提示。由于它们只是4组,因此我创建了4个视图控制器4独特groups.Just简单地使用它的工作完美以下查询:

NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE grp = 'Friends'"]; 

但是我有一个观点每月网页,其中包含在选择器视图12个组件的用户选择,即所有12个月的问题年:

我已经找到了在特定月份检索所有提醒的查询,比如说d月月‧日,我曾尝试使用下面的查询检索:

NSString *sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-12-01' AND '2012-12-31'"]; 

进入查看每月的页面(控制器)之前,还有我刚才提到了一个月选择器视图,我知道我们能有独立的视图控制器页用于显示12个月的数据,就像我在查看组提醒时所做的那样,但是代码变得繁忙。因此,我希望根据在选取器视图(行组件)中选择的月份自动更新表视图。

我发现了一个类似的问题,但问题没有得到答案!

Update table view data based on row component selected in picker view

我试图其中选择器视图存在对于其中得到显示的数据视图控制器来创建类控制器的一个实例:

ERViewEditController * viewEditController;

,并在检索我用下面的代码:

if(viewEditController.monthPicker selectedRowInComponent:0) 
{ 
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-01-01' AND '2012-01-31'"]; 
sql_stmt = [sqlQuery UTF8String]; 
} 

else if(viewEditController.monthPicker selectedRowInComponent:1) 
{ 
sqlQuery = [NSString stringWithFormat:@"select * from reminders WHERE Date BETWEEN '2012-02-01' AND '2012-02-31'"]; 
sql_stmt = [sqlQuery UTF8String]; 
} 

等...等所有个月,然后用下面的代码显示:现在越来越显示

if (sqlite3_prepare_v2(self.remindersDB, sql_stmt, -1, &statament, NULL) == SQLITE_OK) 
     { 
      while (sqlite3_step(statament) == SQLITE_ROW) 
      {    
       ReminderClass *remin = [[ReminderClass alloc]init]; 

       remin.Name = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 1)]autorelease]; 
       remin.Event = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 2)]autorelease]; 
       remin.Date = [[[NSString alloc]initWithUTF8String:(const char *)sqlite3_column_text(statament, 3)]autorelease]; 

       NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; 
       [dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
       NSDate *date = [dateFormat dateFromString:remin.Date]; 
       [dateFormat setDateFormat:@"MMMM dd"]; 
       NSString *dateVal = [dateFormat stringFromDate:date]; 
       remin.Date = dateVal; 

       [self.monthArray addObject:remin]; 
       [remin release]; 
      } 

      sqlite3_finalize(statament); 
     } 

没有:(

我该如何达到这个要求,能不能请你帮我一把宝贵的建议!

感谢所有提前:)

回答

1

你应该只是调用reloadData方法。

if in。^ h fileyou都具有的TableView的

UITableView *table; 

然后,当你想更新你的表对象,你应该写,

[table reloadData]; 
+0

是啊,我知道如何重新加载table.But的数据我要求是:我有一个12个月的选择器视图。现在,当我选择一行时,它将导航到一个视图控制器,在该视图控制器中显示与该月相对应的提醒。 但我不能有12个视图控制器来显示12个相应月份的提醒。所以我希望表视图根据选定的月份自动更新。是否有任何方式将选择器视图行组件与表视图数据... 请帮我在这方面。请再次看到这个问题... 感谢您的回答和关注:) – 2012-01-02 07:46:29

1
  1. 选择PickerView的行

  2. 保存成字符串

  3. 将此字符串存取到新的View Controller中,你的UITableView委托方法实施的地方

  4. cell.textLabel.text = str;其中str是,您只需在pickerView

  5. 选择在新的视图控制器,你在哪里访问字符串的方法的字符串,写一行代码[table reloadData];

+0

感谢您的答案,将实施并取回给您! – 2012-01-02 08:10:50

0

调试您通过插入调试点代码在线。

[self.monthArray addObject:remin]; 

那么,你应该写下面的代码来确认或者您的数组为空或有需要的值。

for(int i=0;i<[self.monthArray count];i++) 
{ 
NSLog("Array ids :%@",[self.monthArray ObjectAtIndex:i]) 
} 

如果它打印在控制台中正确的价值观,那么你应该写在委托方法cellForRowAtIndex以下行。

cell.textLabel.text = [self.monthArray objectAtIndex:indexPath.row]; 
+0

谢的回答,它在控制台被显示为: 数组ids: 2012-01-02 19:11:26.083 EventsReminder [6450:207]数组IDS: 2012 -01-02 19:11:26.083 EventsReminder [6450:207] Array ids: 2012-01-02 19:11:26.084 EventsReminder [6450:207] Array ids: 2012 -01-02 19:11:26.085 EventsReminder [6450:207] Array ids: 2012-01-02 19:11:26.085 EventsReminder [6450:207] Array ids: 2012-01-02 13:42:28

+0

please清楚地看到编辑过的问题:) – 2012-01-02 13:48:17

+0

我在这个链接中找到了答案: http:// stackover流。com/questions/8708543 /获取选定值的选取器视图,这是目前在不同的观点和使用th 感谢khalid为每件事情:) – 2012-01-04 07:11:48

相关问题