使用NSArray和NSMutableArray填充NSStackView

时间:2017-03-07 14:36:53

标签: objective-c macos nsmutablearray nsarray nsstackview

我有一个Stack来填充一系列视图。

$ npm install
npm WARN deprecated jade@1.11.0: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated node-uuid@1.4.7: use uuid module instead
npm WARN deprecated transformers@2.1.0: Deprecated, use jstransformer
npm WARN deprecated mongodb@1.4.12: Please upgrade to 2.2.19 or higher
npm WARN deprecated jade@0.26.3: Jade has been renamed to pug, please install the latest version of pug instead of jade
npm WARN deprecated to-iso-string@0.0.2: to-iso-string has been deprecated, use @segment/to-iso-string instead.
npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue

> kerberos@0.0.4 install /Users/pnash/projects/node-projects/marketing-notifications-node/node_modules/kerberos
> (node-gyp rebuild 2> builderror.log) || (exit 0)

  CXX(target) Release/obj.target/kerberos/lib/kerberos.o

> bson@0.2.22 install /Users/pnash/projects/node-projects/marketing-notifications-node/node_modules/bson
> (node-gyp rebuild 2> builderror.log) || (exit 0)

  CXX(target) Release/obj.target/bson/ext/bson.o
sms-notifications-node@1.0.0 /Users/pnash/projects/node-projects/marketing-notifications-node
├─┬ body-parser@1.17.1 
│ ├── bytes@2.4.0 
│ ├── content-type@1.0.2 
│ ├─┬ debug@2.6.1 
│ │ └── ms@0.7.2 
│ ├── depd@1.1.0 
│ ├─┬ http-errors@1.6.1 
│ │ └── inherits@2.0.3 
│ ├── iconv-lite@0.4.15 
│ ├─┬ on-finished@2.3.0 
│ │ └── ee-first@1.1.1 
│ ├── qs@6.4.0 
│ ├─┬ raw-body@2.2.0 
│ │ └── unpipe@1.0.0 
│ └─┬ type-is@1.6.14 
│   ├── media-typer@0.3.0 
│   └─┬ mime-types@2.1.14 
│     └── mime-db@1.26.0 
├─┬ chai@2.3.0 
│ ├── assertion-error@1.0.0 
│ └─┬ deep-eql@0.1.3 
│   └── type-detect@0.1.1 
├── connect-flash@0.1.1 
├─┬ express@4.15.2 
│ ├─┬ accepts@1.3.3 
│ │ └── negotiator@0.6.1 
│ ├── array-flatten@1.1.1 
│ ├── content-disposition@0.5.2 
│ ├── cookie@0.3.1 
│ ├── cookie-signature@1.0.6 
│ ├── encodeurl@1.0.1 
│ ├── escape-html@1.0.3 
│ ├── etag@1.8.0 
│ ├── finalhandler@1.0.0 
│ ├── fresh@0.5.0 
│ ├── merge-descriptors@1.0.1 
│ ├── methods@1.1.2 
│ ├── parseurl@1.3.1 
│ ├── path-to-regexp@0.1.7 
│ ├─┬ proxy-addr@1.1.3 
│ │ ├── forwarded@0.1.0 
│ │ └── ipaddr.js@1.2.0 
│ ├── range-parser@1.2.0 
│ ├─┬ send@0.15.1 
│ │ ├── destroy@1.0.4 
│ │ └── mime@1.3.4 
│ ├── serve-static@1.12.1 
│ ├── setprototypeof@1.0.3 
│ ├── statuses@1.3.1 
│ ├── utils-merge@1.0.0 
│ └── vary@1.1.0 
├─┬ express-session@1.15.1 
│ ├── crc@3.4.4 
│ ├── on-headers@1.0.1 
│ └─┬ uid-safe@2.1.4 
│   └── random-bytes@1.0.0 
├─┬ http-auth@2.4.11 
│ ├─┬ apache-crypt@1.1.2 
│ │ └── unix-crypt-td-js@1.0.0 
│ ├── apache-md5@1.0.6 
│ └── node-uuid@1.4.7 
├─┬ jade@1.11.0 
│ ├── character-parser@1.2.1 
│ ├─┬ clean-css@3.4.25 
│ │ ├─┬ commander@2.8.1 
│ │ │ └── graceful-readlink@1.0.1 
│ │ └─┬ source-map@0.4.4 
│ │   └── amdefine@1.0.1 
│ ├── commander@2.6.0 
│ ├─┬ constantinople@3.0.2 
│ │ └── acorn@2.7.0 
│ ├─┬ jstransformer@0.0.2 
│ │ ├── is-promise@2.1.0 
│ │ └─┬ promise@6.1.0 
│ │   └── asap@1.0.0 
│ ├─┬ mkdirp@0.5.1 
│ │ └── minimist@0.0.8 
│ ├─┬ transformers@2.1.0 
│ │ ├─┬ css@1.0.8 
│ │ │ ├── css-parse@1.0.4 
│ │ │ └── css-stringify@1.0.5 
│ │ ├─┬ promise@2.0.0 
│ │ │ └── is-promise@1.0.1 
│ │ └─┬ uglify-js@2.2.5 
│ │   ├─┬ optimist@0.3.7 
│ │   │ └── wordwrap@0.0.3 
│ │   └── source-map@0.1.43 
│ ├─┬ uglify-js@2.8.8 
│ │ ├── source-map@0.5.6 
│ │ ├── uglify-to-browserify@1.0.2 
│ │ └─┬ yargs@3.10.0 
│ │   ├── camelcase@1.2.1 
│ │   ├─┬ cliui@2.1.0 
│ │   │ ├─┬ center-align@0.1.3 
│ │   │ │ ├─┬ align-text@0.1.4 
│ │   │ │ │ ├─┬ kind-of@3.1.0 
│ │   │ │ │ │ └── is-buffer@1.1.4 
│ │   │ │ │ ├── longest@1.0.1 
│ │   │ │ │ └── repeat-string@1.6.1 
│ │   │ │ └── lazy-cache@1.0.4 
│ │   │ ├── right-align@0.1.3 
│ │   │ └── wordwrap@0.0.2 
│ │   ├── decamelize@1.2.0 
│ │   └── window-size@0.1.0 
│ ├── void-elements@2.0.1 
│ └─┬ with@4.0.3 
│   ├── acorn@1.2.2 
│   └── acorn-globals@1.0.9 
├─┬ mocha@2.5.3 
│ ├── commander@2.3.0 
│ ├─┬ debug@2.2.0 
│ │ └── ms@0.7.1 
│ ├── diff@1.4.0 
│ ├── escape-string-regexp@1.0.2 
│ ├─┬ glob@3.2.11 
│ │ └─┬ minimatch@0.3.0 
│ │   ├── lru-cache@2.7.3 
│ │   └── sigmund@1.0.1 
│ ├── growl@1.9.2 
│ ├─┬ jade@0.26.3 
│ │ ├── commander@0.6.1 
│ │ └── mkdirp@0.3.0 
│ ├── supports-color@1.2.0 
│ └── to-iso-string@0.0.2 
├─┬ mongoose@3.9.7 
│ ├── async@0.9.0 
│ ├── hooks@0.3.2 
│ ├── kareem@0.0.4 
│ ├─┬ mongodb@1.4.12 
│ │ ├─┬ bson@0.2.22 
│ │ │ └── nan@1.8.4 
│ │ ├── kerberos@0.0.4 
│ │ └─┬ readable-stream@2.2.3 
│ │   ├── buffer-shims@1.0.0 
│ │   ├── core-util-is@1.0.2 
│ │   ├── isarray@1.0.0 
│ │   ├── process-nextick-args@1.0.7 
│ │   ├── string_decoder@0.10.31 
│ │   └── util-deprecate@1.0.2 
│ ├── mpath@0.1.1 
│ ├── mpromise@0.5.4 
│ ├─┬ mquery@1.0.0 
│ │ └── debug@0.7.4 
│ ├── ms@0.1.0 
│ ├── muri@0.3.1 
│ ├── regexp-clone@0.0.1 
│ └── sliced@0.0.5 
├─┬ morgan@1.8.1 
│ └── basic-auth@1.1.0 
└─┬ twilio@1.11.1 
  ├── jwt-simple@0.1.0 
  ├── q@0.9.7 
  ├─┬ request@2.27.0 
  │ ├── aws-sign@0.3.0 
  │ ├── cookie-jar@0.3.0 
  │ ├── forever-agent@0.5.2 
  │ ├─┬ form-data@0.1.4 
  │ │ ├─┬ combined-stream@0.0.7 
  │ │ │ └── delayed-stream@0.0.5 
  │ │ └── mime@1.2.11 
  │ ├─┬ hawk@1.0.0 
  │ │ ├── boom@0.4.2 
  │ │ ├── cryptiles@0.2.2 
  │ │ ├── hoek@0.9.1 
  │ │ └── sntp@0.2.4 
  │ ├─┬ http-signature@0.10.1 
  │ │ ├── asn1@0.1.11 
  │ │ ├── assert-plus@0.1.5 
  │ │ └── ctype@0.5.3 
  │ ├── json-stringify-safe@5.0.1 
  │ ├── mime@1.2.11 
  │ ├── oauth-sign@0.3.0 
  │ ├── qs@0.6.6 
  │ └── tunnel-agent@0.3.0 
  ├── scmp@0.0.3 
  └── underscore@1.8.3 

这很好用。 如果我想用可变数组替换这个数组怎么办呢?

我尝试使用此代码进行“动态”堆栈视图,最后在简单数组中转换可变数组但不起作用:

_countViewArray = [[NSArray alloc] init];
_countViewArray = @[self.a.view,self.b.view,self.c.view];
_stackView = [NSStackView stackViewWithViews:_countViewArray];
如果我打印出可变数组,那么

在consolle中:

_mutableCountViewArray = [[NSMutableArray alloc] init];

[_mutableCountViewArray addObject:@[self.a.view]];
if (caseCondition){
   [_mutableCountViewArray addObject:@[self.b.view]];
}
[_mutableCountViewArray addObject:@[self.c.view]];

_countViewArray = [_mutableCountViewArray copy];
_stackView = [NSStackView stackViewWithViews:_countViewArray];

我该如何解决?

1 个答案:

答案 0 :(得分:1)

问题是您要添加数组(包含单个视图)而不是视图...

请注意,@[x]是一个文字表达式,用于定义包含NSArray的{​​{1}}

这样一条线:

x

应该成为:

[_mutableCountViewArray addObject:@[self.a.view]];

(当然,这适用于您在接下来的几行中添加的每个对象......)

另外,作为旁注:

[_mutableCountViewArray addObject:self.a.view];
您的第一个代码段中的

是多余的,因为您在下一行重新分配值...