2011-05-05 12 views
7

मेरे अनुप्रयोग है एक मेज जो SQLite DB की आबादी है डेटा तो यह तालिका दृश्यमैं कैसे जोड़ सकते हैं "लोड अधिक" तालिका दृश्य करने के लिए विकल्प

यहाँ में आलसी लोड हो रहा है का कारण बनता है की भारी मात्रा में होता है होने कोड है

- (void) searchData { 
    //i=0; 
    [newSearchBar setShowsCancelButton:YES animated:YES]; 



    NSLog(@"search data started "); 

    NSLog(@" checking value %@",newSearchBar.text); 
    NSString *databaseName = @"imeating.sql"; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES); 
    NSString *documentsDir=[documentPaths objectAtIndex:0]; 
    NSString *databasePath=[documentsDir stringByAppendingPathComponent:databaseName]; 
    sqlite3 *database; 

    if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"with in if sqlite3 open"); 
     // Setup the SQL Statement and compile it for faster access 
     sqlite3_stmt *compiledStatement ; 
     const char *sqlStatement ; 

     /* if ([searchFlag isEqualToString:@"DEF"]) 
     { 
     sqlStatement = "select subitem_name, subitem_detail_id from subitem_detail limit 200" ; 
     } 
     else 
     {*/ 
     sqlStatement = "select category_id, upper(subitem_name), subitem_detail_id, protein, carbohydrates, fat, calorie from subitem_detail where subitem_name LIKE ? order by subitem_name limit ?,?" ; 
     NSLog(@"inside search b4 wildsearch %@",searchString); 

     wildSearch = [NSString stringWithFormat:@"%@%@",searchString, @"%"]; 

     NSLog(@"wildsearch %@",wildSearch); 

     [newSearchBar setShowsCancelButton:YES animated:YES]; 
     //NSLog(@"inside search : %@", wildSearch); 


     //} 

     if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 
     { 

      NSLog(@"with in if sqlite3 prepare v2"); 
      // if (![searchFlag isEqualToString:@"DEF"]) 
      // { 
      sqlite3_bind_text(compiledStatement, 1, [wildSearch UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_int(compiledStatement, 2, llimit); 
      sqlite3_bind_int(compiledStatement, 3, ulimit); 

      // } 
      // Loop through the results and add it to array 

      if (llimit <200){ 
       NSLog(@"with in if limit < 200"); 

       itemArray = [[NSMutableArray alloc] init] ; 
      } 

      while (sqlite3_step(compiledStatement) == SQLITE_ROW) { 

       //NSLog(@" while sqlite3 step"); 

       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] ; 
       //[itemDic release]; 
       //itemDic = nil ; 
       itemDic = [[[NSMutableDictionary alloc] init] autorelease]; 


       NSString *categoryId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
       NSString *itemName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
       NSString *itemId = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; 
       NSString *protein = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; 
       NSString *carbo = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)]; 
       NSString *fat = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)]; 
       NSString *calorie = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)]; 

       /* NSLog(@"itemname : %@", itemName); 
       NSLog(@"itemid : %@", itemId); 
       NSLog(@"\n");*/ 

       [itemDic setObject:categoryId forKey:@"categoryId"]; 
       [itemDic setObject:itemId forKey:@"itemId"]; 
       [itemDic setObject:itemName forKey:@"itemName"]; 
       [itemDic setObject:protein forKey:@"protein"]; 
       [itemDic setObject:carbo forKey:@"carbohydrate"]; 
       [itemDic setObject:fat forKey:@"fat"]; 
       [itemDic setObject:calorie forKey:@"calorie"]; 

       [itemArray addObject:itemDic]; 
       if (ulimit%200 == 0) 
       { 
        //activity = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActionSheetStyleDefault]; 
        //[activity startAnimating]; 
        [newTableView reloadData]; 
        //[newSearchBar setShowsCancelButton:YES animated:YES]; 
        //NSLog(@"list all views after 1st reload: %@", [self.navigationController.viewControllers description]); 
        //[newTableView addSubview:activity]; 
        //[activity stopAnimating]; 
        //[activity release]; 
        //NSLog(@" with in if"); 
       } 
       [pool drain]; 
      } /*else 
       { 
       UIAlertView *alert = [[UIAlertView alloc ] initWithTitle:@"Error" message:@"sqlite rows not returned" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] ; 
       [alert show]; 
       }*/ 


     } 
    } else 
    { 
     UIAlertView *alert = [[UIAlertView alloc ] initWithTitle:@"Error" message:@"DataBase Path doesn't exists" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] ; 
     [alert show]; 
    } 

    //NSLog(@"itemArray desc : %@",[itemArray description]); 

} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    //NSLog(@"Inside number of sections in tableview"); 
    return 1; 

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [itemArray count] ; 

} 

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    //NSLog(@"indexpath row val : %d", indexPath.row); 

    tableIndex = indexPath ; 

    //NSLog(@"print indexpath row : %d", indexPath.row); 
    //NSLog(@"print limit : %d", limit); 

    if (indexPath.row > limit) 
    { 
     llimit = llimit+200 ; 
     ulimit = ulimit+200 ; 

     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

     //[opq cancelAllOperations]; 
     NSLog(@"before ns operation"); 

     opq = [NSOperationQueue new]; 
     //opq = [[NSOperationQueue alloc] init]; 
     //[opq setMaxConcurrentOperationCount:2]; 

     // [self performSelectorOnMainThread:@selector(searchData) withObject:nil waitUntilDone:YES]; 

     NSInvocationOperation *op = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(searchData) object:nil] autorelease]; 



     [opq addOperation:op]; 

     NSLog(@"after ns operation"); 
     //[op release]; 
     //[opq release]; 

     [pool drain]; 
     i++; 
     limit = limit + 120 ; 
     NSLog(@"i=%d",i); 

     //[cell setText:[[itemArray objectAtIndex:indexPath.row] valueForKey:@"itemName"]]; 
    } 

    // Configure the cell. 
    //[cell setText:[[itemArray objectAtIndex:indexPath.row] valueForKey:@"itemName"]]; 
    cell.textLabel.text = [[itemArray objectAtIndex:indexPath.row] valueForKey:@"itemName"] ; 
    NSString *pval, *cval, *fval, *cal ; 
    if ([[[itemArray objectAtIndex:indexPath.row] valueForKey:@"protein"] length] <= 5) 
     pval = [[itemArray objectAtIndex:indexPath.row] valueForKey:@"protein"]; 
    else 
     pval = [[[itemArray objectAtIndex:indexPath.row] valueForKey:@"protein"] substringWithRange:NSMakeRange(0, 5)]; 

    if ([[[itemArray objectAtIndex:indexPath.row] valueForKey:@"carbohydrate"] length] <= 5) 
     cval = [[itemArray objectAtIndex:indexPath.row] valueForKey:@"carbohydrate"]; 
    else 
     cval = [[[itemArray objectAtIndex:indexPath.row] valueForKey:@"carbohydrate"] substringWithRange:NSMakeRange(0, 5)]; 

    if ([[[itemArray objectAtIndex:indexPath.row] valueForKey:@"fat"] length] <= 5) 
     fval = [[itemArray objectAtIndex:indexPath.row] valueForKey:@"fat"]; 
    else 
     fval = [[[itemArray objectAtIndex:indexPath.row] valueForKey:@"fat"] substringWithRange:NSMakeRange(0, 5)]; 

    if ([[[itemArray objectAtIndex:indexPath.row] valueForKey:@"calorie"] length] <= 5) 
     cal = [[itemArray objectAtIndex:indexPath.row] valueForKey:@"calorie"]; 
    else 
     cal = [[[itemArray objectAtIndex:indexPath.row] valueForKey:@"calorie"] substringWithRange:NSMakeRange(0, 5)]; 

    cell.detailTextLabel.text = 
    [NSString stringWithFormat:@"Prot: %@ Carb: %@ Fat: %@ Cal: %@", pval, cval, fval, cal] ; 
    return cell; 
} 

मैं "लोड अधिक" मेरे तालिका दृश्य सीमा के विशेष अवधि में SQLite DB से रिकॉर्ड लोड करने के लिए

उत्तर

4

अनुभाग में पंक्तियों की संख्या के लिए एक +1 जोड़े के लिए पंक्ति में बटन की जरूरत है:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [itemArray count] + 1; 

} 
  • फिर cellforrowatindexpath में, अगर indexPath.row [itemArray गिनती] से बड़ा है देखते हैं। यदि ऐसा है, तो उस सेल के शीर्षक के रूप में टेक्स्ट "अधिक लोड करें ..." डालें।

  • didSelectRowAtIndexPath में, देखें कि indexPath.row [itemArray count] के बराबर है या नहीं। यदि ऐसा है, तो itemArray में एक्स और परिणाम जोड़ें और फिर [tableView reloadData] पर कॉल करें।

  • कुछ यूआई सुधार के लिए आप तालिका दृश्य के शीर्ष पर एक यूआईएक्टिविटी इंडिकेटर जोड़ सकते हैं ताकि यह दिखाया जा सके कि पृष्ठभूमि में कुछ प्रसंस्करण चल रहा है।

+0

हाय वास्तव में मुझे पता नहीं मैं कैसे ऊपर देता है जिन्हें आप संभव edit..if को यू मेरी कोड संपादित कर सकते हैं दे दिया है मैं अपने question..and में दे दिया है में SQLite प्रश्नों को बदल सकते हैं यू टेलीफोन कर सकते हैं अगर मैं उस – Ramz

+0

पर क्लिक करता हूं तो लोड बटन अधिक काम करेगा, एंड्री अपने आंशिक रूप से काम कर रहा है..मैं इस लोड को और अधिक विकल्प कैसे हटा सकता हूं जब खोज बार में पहले से चयनित डेटा .. अगर यह वहां है तो हम और अधिक लोड नहीं करना चाहते हैं ... – Ramz

+0

@ रामकुमार: मैं आपका आखिरी सवाल नहीं समझता। तुम क्या करने की कोशिश कर रहे हो? – Andrei

संबंधित मुद्दे