0

insertobject atindex:0 行が nsmutablearray に何も追加できない理由を誰かが理解するのを手伝ってくれますか? ありがとう。

- (void)setSplitViewBarButtonItem:(UIBarButtonItem *)splitViewBarButtonItem
{
    if (_splitViewBarButtonItem != splitViewBarButtonItem) {
        NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];
        if (_splitViewBarButtonItem) [toolbarItems removeObject:_splitViewBarButtonItem];
        if (splitViewBarButtonItem) {
            [toolbarItems insertObject:splitViewBarButtonItem atIndex:0];
            NSLog(@"setSplitViewBarButtonItem: toolbarItems has %u objects",toolbarItems.count);
        }
        self.toolbar.items = toolbarItems;
        _splitViewBarButtonItem = splitViewBarButtonItem;
    }
}

toolbar は、同じ .m ファイルで以前に定義されたプライベート プロパティであるため、

@property (nonatomic, weak) UIToolbar *toolbar;

ライン交換もやってみた

NSMutableArray *toolbarItems = [self.toolbar.items mutableCopy];

NSMutableArray *toolbarItems = [[NSMutableArray alloc]init];
toolbarItems = [self.toolbar.items mutableCopy];

それでも、toolbarItems には何も追加されません。デバッガーは一貫して splitViewBarButtonItem が非 null であることを示し、私の NSLog はゼロを出力し続けます。

どうもありがとう。

4

2 に答える 2

0

わかりました、実際に私が本当に必要としていたのは、ツールバーのプロパティを IBOutlet にすることでした。

@property (nonatomic, weak) UIToolbar *toolbar;

@property (nonatomic, weak) IBOutlet UIToolbar *toolbar;

この変更により、最初に投稿したコードはそのまま機能します。IBOutlet として定義されていない場合、ツールバーが適切にインスタンス化されていないと思います。

于 2012-11-30T21:17:07.307 に答える
0

if (_splitViewBarButton)... 行をこれに置き換えることで、insertObject行を機能させることができました

if (_splitViewBarButtonItem) {
    toolbarItems = [self.toolbar.items mutableCopy];
    [toolbarItems removeObject:_splitViewBarButtonItem];
} else {
    toolbarItems = [[NSMutableArray alloc]init];
}

つまり、_splitViewBarButtonItem が設定されている (バー ボタンがある) 場合は、それを削除します。それ以外の場合は、init を割り当てる必要があります。

私の問題は今割り当てです

self.toolbar.items = toolbarItems;

が機能せず、詳細ビューにバー ボタンが表示されるようになりました。助言がありますか?

于 2012-11-30T19:27:13.293 に答える