пытается скопировать массив из одного класса в массив, но скопировал массив, показывающий ноль - PullRequest
1 голос
/ 19 января 2012

Привет, я пытаюсь получить массив из класса StudentDbwithsearchbarViewController в класс SearchBarDB, но результирующий массив не имеет данных, которые он передает null Array. Пожалуйста, помогите мне с этим.
заранее спасибо

#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];
}

1 Ответ

1 голос
/ 19 января 2012

Множество потенциальных проблем, нет однозначного ответа без подсказки о том, что вы пытались или как вы определили, что это не удалось.

  • методы не должны иметь префикс get;просто назовите это studentRecords или fetchStudentRecords

  • ваш код управления памятью повсюду;по крайней мере, у вас будет утечка этого массива.

  • retainCount бесполезен, не называйте его.

  • запись в необработанном видеSQL - пустая трата времени;по крайней мере, используйте оболочку типа FMDB или, что еще лучше, перейдите к CoreData

Наилучшее предположение для сбоя: база данных не существует или запрос не выполнен.Вы прошли через код запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...