2012-01-19 62 views
1

嗨,我想從StudentDbwithsearchbarViewController類到SearchBarDB類,但由此產生的數組沒有任何數據它給nullArray。這個你能幫我嗎。
由於事先試圖複製陣列從一個類到數組,但複製數組顯示爲null

#import <UIKit/UIKit.h> 
@interface StudentDbwithsearchbarViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> { 
IBOutlet UITextField *txtMarks,*txtSname; 
IBOutlet UITableView *tableStudents; 
NSMutableArray *arrStudents; 

} 
@property(nonatomic,retain) NSMutableArray *arrStudents; 

-(IBAction)saveStudentDetails; 
-(IBAction)gotoSearchpage; 
@end 

@implementation StudentDbwithsearchbarViewController 
@synthesize arrStudents; 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    arrStudents = [[DbStudent getStudentRecords]retain]; 
    NSLog(@"%@",arrStudents); 
    NSLog(@"%d",[arrStudents retainCount]); 
} 

#import "DbStudent.h" 
+(NSMutableArray*)getStudentRecords{ 

    NSArray *arrDocPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *strDestPath = [NSString stringWithFormat:@"%@/Student5.sqlite",[arrDocPath objectAtIndex:0]]; 
    NSMutableArray *arrStudents = [[NSMutableArray alloc]init]; 
    sqlite3 *db; 
    if(sqlite3_open([strDestPath UTF8String], &db)==SQLITE_OK) 
    { 

     NSString *query = @"SELECT * FROM Student"; 
     void* v; 
     char* err_msg; 
     sqlite3_stmt *studentStmt; 
     if(sqlite3_prepare_v2(db, [query UTF8String], -1, &studentStmt, &err_msg)==SQLITE_OK) 
     { 
      while (sqlite3_step(studentStmt)==SQLITE_ROW) { 

       int sno = sqlite3_column_int(studentStmt, 0); 
       NSString *sname = [NSString stringWithUTF8String: sqlite3_column_text(studentStmt, 1)]; 
       float marks = sqlite3_column_double(studentStmt, 2); 

       Student *st = [[Student alloc]init]; 
       st.Sno = sno; 
       st.Sname = sname; 
       st.marks = marks; 
       [arrStudents addObject:st]; 
      } 

     } 

    } 
    return arrStudents; 


} 

#import "SearchBarDB.h" 
#import"StudentDbwithsearchbarViewController.h" 

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    StudentDbwithsearchbarViewController *sbd = [[StudentDbwithsearchbarViewController alloc]init]; 
    NSLog(@"%d",[sbd.arrStudents retainCount]); 
    NSLog(@"%@",sbd.arrStudents); 

// arrstudentBase = [sbd.arrStudents copy]; 
    arrMatchedString = [[NSMutableArray alloc]init]; 
} 
+0

新手出現此問題的常見原因是不理解對象。當你在一個對象中設置一個值時,它不會神奇地出現在同一個類的另一個單獨創建的對象中。 –

+0

(但在你的情況下,它似乎有點不同 - 你在設置它之前引用了'arrStudents'''''把NSLog語句放在你設置的引用值並且觀察它們出來的順序,然後考慮可能的) –

回答

1

很多潛在的問題,沒有一個線索,你已經嘗試什麼或如何你確定它沒有任何明確的答案。

  • 方法不應該以get作爲前綴;只是叫它studentRecordsfetchStudentRecords

  • 你的內存管理代碼已經遍地都是;至少你會泄漏這個數組。

  • retainCount是無用的,不要叫它。

  • 編寫原始SQL是浪費時間;至少使用像FMDB包裝或者更好的是,移動到CoreData

最佳猜測失敗:數據庫不存在或查詢失敗。你是否瀏覽了查詢代碼?

+0

'retainCount'偶爾可用於查找存儲錯誤,但是,當然,只有在您非常清楚自己在做什麼的時候。許多相當聰明的人仍然編寫原始SQL。 –

+0

聰明的人通常喜歡重新發明輪子(我當然知道這樣做),但這並不能讓輪子重新發明,更不用說重新發明......在極少數情況下,生SQL是必需的,但它們很少。 – bbum

+0

我認爲有一件事是聰明人不喜歡用腦細胞來記住十種不同的SQL方法。 –