【问题标题】:NSArray unaccessible outside of viewDidLoadNSArray 在 vi​​ewDidLoad 之外无法访问
【发布时间】:2016-11-10 09:17:01
【问题描述】:

希望是一个非常简单的问题。正如您在下面的代码中看到的那样,我在 viewdidload 中的代码中设置了两个 NSArray。问题是我无法在 viewDidLoad 之外访问这些数组。有没有办法让我在 viewDidLoad 之外填充我的 cell.textlabel.text?

代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURLSession *session = [NSURLSession sharedSession];

    //URLText is from previous VC see .h file.
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.test.com/%@/%@.json", _URLText, _URLText]] completionHandler:^(
                                                                                                                                                                                               NSData *data,
                                                                                                                                                                                               NSURLResponse *response,
                                                                                                                                                                                               NSError *error) {
        NSDictionary *vDB = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

        NSArray *amountOfV = [vechileDB valueForKeyPath:@"amount"]; //how to assign nsstring from dictionary.
        NSArray *makeOfV = [vDB valueForKeyPath:@"make"];

        NSLog(@"%@ %@", makeOfV, amountOfV);


    }];

    //Run the completed task.
    [dataTask resume];

}

【问题讨论】:

  • 将它们从 viewDidLoad 移出到类定义中。并阅读一本关于编程的初学者书籍;-)
  • 在你这样做之后你会遇到的问题,请参阅Variable returning NULL after Block execution
  • 我不喜欢“阅读初学者书籍”之类的说法。这没什么用,虽然对某些人来说可能很有趣,但对提出问题的人来说肯定不好笑。 TBH,这对我来说有点像是一种欺凌。 :-(
  • 与其讽刺香肠,如果你建议读一本真正的书肯定会更有帮助,我相信你从来没有在一夜之间学会,每个人都必须从某个地方开始,我也完全同意 conarch你的评论。
  • 也许来自 Big Nerd Ranch 或 Raywenderlich 的书籍(不过主要是 Swift 的新东西),iTunes U 上的斯坦福 iOS 讲座很好,但你需要时间来观看它们。如果您的问题得到解决,也请接受其中一个答案。

标签: ios objective-c


【解决方案1】:

您可以将数组定义为 .m 文件中的属性,见下文,然后只需使用 self.amountOfV 引用数组即可。

@interface YourClass ()
@property (nonatomic) NSArray *amountOfV;
@property (nonatomic) NSArray *makeOfV;
@end

@implementation YourClass 
...

Realm 有一篇关于属性属性的好文章,如果你有兴趣,https://realm.io/news/tmi-objective-c-property-attributes/

【讨论】:

    【解决方案2】:

    您可以将这两个数组声明为属性,例如:

    @property (strong, nonatomic) NSArray *amountOfV;
    

    并将他们称为self.amountOfV

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 2012-09-20
      • 2013-03-28
      相关资源
      最近更新 更多