以编程方式将菜单+项添加到NSPopupButton

回声二进制

我有一个自定义类“ BackupIncrement”,该类从sqlite3数据库获取数据,并且工作正常。我还有一个NSPopUpButton名为“ pubDefaultIncrement”的挂钩IB

最终结果是,我希望popupbutton使用有意义的标题以及每个menuitemor值作为数据库的增量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可以正常工作,它循环5次从sqlite3表中获取每一行。

这个:

NSLog(@"%@", mnuBackupIncrement);

打印出菜单对象,其中包含5个菜单项对象。

但是,当我运行我的项目代码时,popupbutton有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为“值”,这样当一个项目被选中,我可以得到的标签或任何一个然后采取相应的行动的菜单项。

谁能指出我正确的方向?

回声二进制

事实证明(再次),我的问题是一个时机。我正在从ViewController的initWithNibName内部调用有问题的函数...

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
        if (!claAppDelegate) {
            claAppDelegate = [[AppDelegate alloc] init];
        }
        //[self doAddItemsTopubDefaultBackupIncrement]; <--- HERE doesn't work....
    }
    return self;
}

相反,当ViewController加载我应该一直调用它时

- (void)loadView {
    [self viewWillLoad];
    [super loadView];
    [self viewDidLoad]; // <-- call in here instead
}

- (void)viewDidLoad {
    [self doAddItemsTopubDefaultBackupIncrement]; //<-- HERE: works just fine...
    [pubDefaultIncrement selectItemWithTag:claAppDelegate.intDefaultBackupIncrmentId];
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以编程方式创建NSPopupButton并将项目添加到列表

来自分类Dev

如何以编程方式而不是菜单xml将子菜单项添加到NavigationView

来自分类Dev

Drupal 7:以编程方式将项目添加到管理工具栏/菜单

来自分类Dev

以编程方式将 MS Access DB 文件中的子菜单项添加到菜单条

来自分类Dev

有没有办法以编程方式将标签添加到TFS工作项?

来自分类Dev

如何以编程方式将图像添加到WPF选项卡控件项

来自分类Dev

如何以编程方式将图像添加到WPF选项卡控件项

来自分类Dev

如何以编程方式将子菜单项添加到新的材质设计android支持库

来自分类Dev

将重复项添加到NameValueCollection

来自分类Dev

以编程方式将Podcast feed添加到Podcast应用

来自分类Dev

如何以编程方式将代理添加到NSURLSession

来自分类Dev

以编程方式将StackPanel添加到ComboBoxItem

来自分类Dev

以编程方式将证书添加到个人商店

来自分类Dev

以编程方式将项目添加到gridview / listview

来自分类Dev

以编程方式将片段添加到现有ViewGroup

来自分类Dev

以编程方式将<a>添加到SVG路径对象

来自分类Dev

以编程方式将证书添加到Java KeyStore的选项

来自分类Dev

以编程方式将NSClickGestureRecognizer添加到NSButton中

来自分类Dev

以编程方式将边距添加到RelativeLayout

来自分类Dev

以编程方式将数据添加到Viewflipper

来自分类Dev

以编程方式将内容添加到tinymce

来自分类Dev

以编程方式将标题添加到UITableview

来自分类Dev

以编程方式将Button添加到MapFragment / GoogleMap

来自分类Dev

以编程方式将按钮添加到UINavigationController

来自分类Dev

在for循环中以编程方式将addView添加到TableRow

来自分类Dev

以编程方式将转接号码添加到Twilio号码

来自分类Dev

以编程方式将文件添加到jquery fileupload

来自分类Dev

以编程方式将视图添加到RelativeLayout android

来自分类Dev

Android:以编程方式将半径添加到imageButton

Related 相关文章

  1. 1

    以编程方式创建NSPopupButton并将项目添加到列表

  2. 2

    如何以编程方式而不是菜单xml将子菜单项添加到NavigationView

  3. 3

    Drupal 7:以编程方式将项目添加到管理工具栏/菜单

  4. 4

    以编程方式将 MS Access DB 文件中的子菜单项添加到菜单条

  5. 5

    有没有办法以编程方式将标签添加到TFS工作项?

  6. 6

    如何以编程方式将图像添加到WPF选项卡控件项

  7. 7

    如何以编程方式将图像添加到WPF选项卡控件项

  8. 8

    如何以编程方式将子菜单项添加到新的材质设计android支持库

  9. 9

    将重复项添加到NameValueCollection

  10. 10

    以编程方式将Podcast feed添加到Podcast应用

  11. 11

    如何以编程方式将代理添加到NSURLSession

  12. 12

    以编程方式将StackPanel添加到ComboBoxItem

  13. 13

    以编程方式将证书添加到个人商店

  14. 14

    以编程方式将项目添加到gridview / listview

  15. 15

    以编程方式将片段添加到现有ViewGroup

  16. 16

    以编程方式将<a>添加到SVG路径对象

  17. 17

    以编程方式将证书添加到Java KeyStore的选项

  18. 18

    以编程方式将NSClickGestureRecognizer添加到NSButton中

  19. 19

    以编程方式将边距添加到RelativeLayout

  20. 20

    以编程方式将数据添加到Viewflipper

  21. 21

    以编程方式将内容添加到tinymce

  22. 22

    以编程方式将标题添加到UITableview

  23. 23

    以编程方式将Button添加到MapFragment / GoogleMap

  24. 24

    以编程方式将按钮添加到UINavigationController

  25. 25

    在for循环中以编程方式将addView添加到TableRow

  26. 26

    以编程方式将转接号码添加到Twilio号码

  27. 27

    以编程方式将文件添加到jquery fileupload

  28. 28

    以编程方式将视图添加到RelativeLayout android

  29. 29

    Android:以编程方式将半径添加到imageButton

热门标签

归档