0

私はIOSが初めてで、これが私の最初のcrud操作であり、このアプリにBIDDatabaseAppという名前を付けました

私はただの学習者であり、このここに画像の説明を入力問題をデバッグするのが難しくなっています。

No visible @interface for BidProductsdeclares the selector nameProdand descProdwhich are the properties atBidProductsというエラーが表示され、同じエラーが発生しNSArrayますaddObject

今私がやっていることは、データベースを作成しSqlite、ビューの追加と削除のために 3 つのボタンを備えたストーリーボードを使用することです。

OK、これが私のファイル階層 です BIDProducts.h NSObject のサブクラス

#import <Foundation/Foundation.h>

@interface BIDProducts : NSObject
@property (nonatomic, strong)NSString *nameProd;
@property (nonatomic, strong)NSString *descProd;


@end

BIDProducts.h

#import "BIDProducts.h"

@implementation BIDProducts
@synthesize nameProd,descProd;

@end

ここのBIDViewcontroller.h ファイルのBIDViewController.hは、sqlite3.hをインポートしています.xcodeはコードでそれを取得していません.静的な方法で書いていますが、エラーは発生しておらず、データベースとの接続も確立していません.また。まだデータベースに接続できません。

#import <UIKit/UIKit.h>
#import "sqlite3.h"
#import "BIDProducts.h"


@interface BIDViewController : UIViewController<UITableViewDataSource , UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITextField *txtNameFeild;
@property (weak, nonatomic) IBOutlet UITextField *txtDescFeild;
@property (weak, nonatomic) IBOutlet UITableView *txtAreaViewList;



- (IBAction)btnAddProduct:(id)sender;
- (IBAction)btnDeleteProduct:(id)sender;
- (IBAction)btnViewProduct:(id)sender;

@end

BIDViewController.M

#import "BIDViewController.h"
#import "BIDProducts.h"

@interface BIDViewController ()
{


    NSArray *arrayOFProducts;
    sqlite3 *productsDB;
    NSString *dbPathString;

}
@end

@implementation BIDViewController



- (void)viewDidLoad
{
    [super viewDidLoad];
    arrayOFProducts = [[NSMutableArray alloc]init];
    [[self txtAreaViewList]setDelegate:self];
    [[self txtAreaViewList]setDataSource:self];
    [self createOrOpenDb];
    // Do any additional setup after loading the view, typically from a nib.
}

-(void)createOrOpenDb
{
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
    NSString *docPath = [path objectAtIndex:0];

    dbPathString = [docPath stringByAppendingPathComponent:@"productsDB.sqlite"];

    char *error;
    NSFileManager *fileManager = [NSFileManager defaultManager];

    if (![fileManager fileExistsAtPath:dbPathString]) {
        const char *dbPath = [dbPathString UTF8String];

        if (sqlite3_open(dbPath, &productsDB) == SQLITE_OK) {
            const char *sqlStmt = "CREATE TABLE IF NOT EXISTS TBLLISTPRODUCT (ID INTEGER PRIMERYKEY AUTOINCREMENT, PRODNAME VARCHAR, PRODDESC VARCHAR ) ";
            sqlite3_exec(productsDB, sqlStmt, NULL, NULL, &error);

            sqlite3_close(productsDB);

        }

    }


}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

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

}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    }

BIDProducts *aProduct = [arrayOFProducts objectAtIndex:indexPath.row];

cell.textLabel.text = aProduct.nameProd;
cell.textLabel.text = aProduct.descProd;


return cell;


}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)btnAddProduct:(id)sender {
    char *error;
    if (sqlite3_open([dbPathString UTF8String], &productsDB) == SQLITE_OK) {
        NSString *insertStmt = [NSString stringWithFormat:@"INSERT INTO TBLLISTPRODUCT(PRODNAME,PRODDESC) values ('%s', '%s') ", [self.txtNameFeild.text UTF8String] , [self.txtDescFeild.text UTF8String]];
        const char *insert_stmt = [insertStmt UTF8String];

        if (sqlite3_exec(productsDB, insert_stmt, NULL, NULL, &error) == SQLITE_OK) {
            NSLog(@"person added");
            BIDProducts *products = [[BIDProducts alloc]init];
            [products nameProd:self.txtNameFeild.text];

            [products descProd:self.txtDescFeild.text];

            [arrayOFProducts addObject:products];



        }
        sqlite3_close(productsDB);

    }


}

- (IBAction)btnDeleteProduct:(id)sender {
}

- (IBAction)btnViewProduct:(id)sender {
}

@end
4

1 に答える 1

0

プロパティを設定する構文が間違っています。

 products.nameProd = self.txtNameFeild.text;

コンパイラが同等のものに変換する

[products setNameProd:self.txtNameFeild.text];

オブジェクト を追加するかarrayOFProductsのように宣言する必要があります。NSMutableArray

(ソース コードからステートメントを削除できることに注意してください@synthesize。現在の Clang コンパイラはプロパティを自動的に合成します。)

于 2013-09-12T17:34:53.967 に答える