Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列值检索到iPhone中的另一个tableview中?_Iphone_Ios_Objective C_Sqlite - Fatal编程技术网

如何将列值检索到iPhone中的另一个tableview中?

如何将列值检索到iPhone中的另一个tableview中?,iphone,ios,objective-c,sqlite,Iphone,Ios,Objective C,Sqlite,我对IOS非常熟悉,我的数据库中有存款表和费用表。我只想从存款表中检索存款金额,从费用表中检索费用金额,并将其分为两个表视图:一个是存款金额表视图,另一个是单屏费用金额表视图。下面是我的dbmodelclass.h #import <UIKit/UIKit.h> #import <sqlite3.h> @interface dbModelClass : UIViewController { NSMutableDictionary *readDic; NSM

我对IOS非常熟悉,我的数据库中有存款表和费用表。我只想从存款表中检索存款金额,从费用表中检索费用金额,并将其分为两个表视图:一个是存款金额表视图,另一个是单屏费用金额表视图。下面是我的dbmodelclass.h

#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface dbModelClass : UIViewController
{
    NSMutableDictionary *readDic;
    NSMutableArray *readArray;
}
+(NSString *)connectDb;
+(BOOL)createTable;
+(BOOL)createTable3;
+(int)saveData:(NSMutableArray *)data;
+(int)saveData2:(NSMutableArray *)data;
+(NSMutableArray *)getData;
@end
这是我的
netviewcontroller.h

#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface dbModelClass : UIViewController
{
    NSMutableDictionary *readDic;
    NSMutableArray *readArray;
}
+(NSString *)connectDb;
+(BOOL)createTable;
+(BOOL)createTable3;
+(int)saveData:(NSMutableArray *)data;
+(int)saveData2:(NSMutableArray *)data;
+(NSMutableArray *)getData;
@end
#import <UIKit/UIKit.h>

@interface NetViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>//DepositTable *depositCo
{
IBOutlet  UILabel *depositLabel,*expenseLabel,*netvalueLabel;
IBOutlet  UITextField *netvalueText;
IBOutlet UITableView *depositTable,*expenseTable;


}
@property (strong, nonatomic) UINavigationController *navigationController;
@property(strong,nonatomic)UILabel  *depositLabel,*expenseLabel,*netvalueLabel;
@property(strong,nonatomic)UITextField *netvalueText;
@property(strong,nonatomic)UITableView *depositTable,*expenseTable;



-(IBAction)netvalue:(id)sender;

@end

请帮帮我你做得不好:)

#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface dbModelClass : UIViewController
{
    NSMutableDictionary *readDic;
    NSMutableArray *readArray;
}
+(NSString *)connectDb;
+(BOOL)createTable;
+(BOOL)createTable3;
+(int)saveData:(NSMutableArray *)data;
+(int)saveData2:(NSMutableArray *)data;
+(NSMutableArray *)getData;
@end
  • 为什么要创建继承自
    UIViewController
    的对象要管理数据库,只需创建继承自
    NSObject
    的对象即可

  • #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
  • 在getData methode中,如果您只是为存款表请求数据,则应将参数(表名和金额)传递给methode,以了解您是希望从存款表还是expense2表获取数据

  • #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
  • 最后,在NetViewController类中,您可以执行以下操作:

  • #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    编辑答案:

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    您可以这样做,例如:

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    -(NSMutableArray *)getDataForTable:(NSString *)tableName withAmount:(NSString *)amountName
    {
    sqlite3 *dbobj;
    NSString *dbpath  =[dbModelClass connectDb];
    readArray=[[NSMutableArray alloc]init];
    if(sqlite3_open([dbpath UTF8String], &dbobj)==SQLITE_OK)
    {
        sqlite3_stmt *statement=nil;
    
        //**** NSString *string=@"SELECT name FROM emptable";
    
       NSString *string = [NSString stringWithFormat:@"SELECT *FROM %@ WHERE %@",tableName,amountName];
    
       const char *query=[string UTF8String];
        if(sqlite3_prepare_v2(dbobj, query, -1, &statement, NULL)==SQLITE_OK)
        {
            while (sqlite3_step(statement)==SQLITE_ROW)
            {
        readDic=[[NSMutableDictionary alloc] init];
    
                [readDic setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)] forKey:@"deposit_amount"];
                // NSString *aName=[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
                // NSString *pwd=[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
                //[readDic setObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)] forKey:@"remarks"];
                //  [readArray addObject:aName];
                // [readArray1 addObject:pwd];
                [readArray addObject:readDic];
                // NSLog(@"%@",readDic);
            }
        }
        sqlite3_finalize(statement);
    }
    
    添加此
    -(NSMutableArray*)getDataForTable:(NSString*)tableName with amount:(NSString*)amountName
    dbModelClass.h

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    现在,您可以在NetViewController中通过传递表名和金额来调用此方法:

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    [dbModelClass connectDb];
    NSArray * depositResult = [dbModelClass getDataWith:@"deposite" amountName:@"deposit_amount"];
    
    //通过向另一个表传递适当的名称,对其执行相同的操作

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    

    PS:这段代码没有经过测试,您应该重构它,它只是向您展示如何为方法传递参数

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    最好的解决方案实际上是最简单的

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    主视图控制器,带有两个嵌入式TableViewController,每个都显示和管理数据库中的一个表

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    在viewDidLoad期间,您将创建每个tableViewController的实例,将其框架设置为位于主视图的所需坐标上,并将其添加到主视图中

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    
    现在,您可以为每个表创建一个干净、简单的委托模型,如果您在主视图控制器中保持每个tableViewController的实例可用(分配为属性),您将能够从主视图与每个表通信

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end
    

    更复杂的方法是向主视图xib添加两个tableView,将它们连接到主视图控制器中的datasource和delegate方法,然后测试对delegate方法的每次调用,以确定哪个tableView调用了该方法。我已经这样做了,但从长远来看,这是一个很难维护的问题。

    实际上我对这一点非常陌生。在我们完成上述过程时,您能简单地解释一下吗?在这里发生了“选择器getDatawith的未知类方法:存款金额”异常存款金额是金额在dbModelClass中添加方法。h:-(NSMutableArray*)getDataForTable:(NSString*)tableName withAmount:(NSString*)amountNameYes已添加但即将发布,请SamirJi帮助我将该方法作为类方法,在dbModelClass.h和dbModelClass.mpease中用“+”替换“-”,请您一步一步地解释我,只有我知道我对该方法非常陌生
    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    @interface dbModelClass : UIViewController
    {
        NSMutableDictionary *readDic;
        NSMutableArray *readArray;
    }
    +(NSString *)connectDb;
    +(BOOL)createTable;
    +(BOOL)createTable3;
    +(int)saveData:(NSMutableArray *)data;
    +(int)saveData2:(NSMutableArray *)data;
    +(NSMutableArray *)getData;
    @end