1

sqlite3データベースからデータを取得するカスタムクラス「BackupIncrement」があり、問題なく動作します。NSPopUpButtonに接続されている「pubDefaultIncrement」という名前もありIBます。

popupbutton最終結果は、意味のあるタイトルを入力しmenuitem、データベースからの増分 ID (主キー) である各または値を入力したいということです。

問題のコードは次のとおりです。

- (void)doAddItemsTopubDefaultBackupIncrement {
    marBackupIncrement = [[NSMutableArray alloc] init];
    pubDefaultIncrement = [[NSPopUpButton alloc] init];
    [pubDefaultIncrement removeAllItems];
    mnuBackupIncrement = [[NSMenu alloc] init];
    const char* chrSQLSelect = "SELECT * FROM _backup_increments";
    sqlite3_stmt* compiledSQL;
    if (sqlite3_prepare_v2(claAppDelegate.sl3Database, chrSQLSelect, -1, &compiledSQL, NULL) == SQLITE_OK) {
        while (sqlite3_step(compiledSQL) == SQLITE_ROW) {

            BackupIncrement* bi = [[BackupIncrement alloc]
                            initWithintIncrementId:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledSQL, 0)]
                            AndstrIncrementValue:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledSQL, 1)]
                            AndstrIncrementDescription:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledSQL, 2)]];
            NSMenuItem* mi = [[NSMenuItem alloc]
                            initWithTitle:[bi strIncrementValueDescription]
                            action:Nil
                            keyEquivalent:[bi strIncrementValue]];
            [mi setTarget:self];
            [mi setRepresentedObject:bi];
            [mi setTag:[[bi intIncrementId] integerValue]];
            [mnuBackupIncrement addItem:mi];
            NSLog(@"Menu Item: %@", mi);
            NSLog(@"Menu Item Title: %@", [mi title]);
            NSLog(@"Menu Item Tag: %ld", (long)[mi tag]);
            //[[pubDefaultIncrement menu] addItem:mi];
            //[marBackupIncrement addObject:bi];
        }
    }
    //NSLog(@"%@", mnuBackupIncrement);
    //[pubDefaultIncrement setTarget:self];
    [[pubDefaultIncrement menu] setSupermenu:mnuBackupIncrement];
    [pubDefaultIncrement setMenu:mnuBackupIncrement];
}

SQLは機能し、sqlite3テーブルから各行をフェッチして5回ループします。

これ:

NSLog(@"%@", mnuBackupIncrement);

内部に 5 つのメニュー項目オブジェクトを含むメニュー オブジェクトを出力します。

ただし、プロジェクト コードを実行すると、ポップアップ ボタンには 3 つの機能があります。

1st: a blank item
2nd: Item 2
3rd: Item 3

私はもともと ArrayController と Bindings でこれを試みていましたが、各メニュー項目のタグを適切に機能させることができなかったようです。そういうやり方なら、ビンディングの正しいやり方も喜んで聞きます。

BackupIncrement オブジェクトは 4 つのプロパティを公開しています。

intIncrementId: the primary key from the table (1-5 currently for the 5 rows)
strIncrementValue: the single letter value from the table (h, d, w, m, y)
strIncrementDescription: the desc for the value (hour, day, week, month, year)
strIncrementValueDescription: a combination of the previous two - e.g. "d (day)", "m (month)"

繰り返しますが、理想的には、id には NSPopUpButton に、表示される「コンテンツ」として strIncrementValueDescription を持ち、対応する intIncrementId を「値」として持つ menuitem を設定して、アイテムが選択されたときにタグを取得するか、それに応じてどちらかを取得できるようにします。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1