访问方式与static int和static NSArray不同

时间:2017-06-26 07:28:23

标签: ios objective-c

在此演示代码下方,该过程的逻辑并不重要。

@interface ViewController ()<UITableViewDataSource, UITableViewDelegate>

@end

static int channelIndex = 0;
static NSMutableArray *channelsDataArray = nil;

@implementation ViewController
    - (void)getSomething {
            // Append the desiredValuesDict dictionary to the following array.
            if (!self.channelsDataArray) {
                self.channelsDataArray = [[NSMutableArray alloc] initWithObjects: desiredValuesDict, nil];
            } else {
                [self.channelsDataArray addObject:desiredValuesDict];
                NSLog(@"channelsDataArray : %@", self.channelsDataArray);
            } 

            // This will print the result I expected.
            NSLog(@"channelIndxBefore: %i", channelIndex);
            ++channelIndex;
            NSLog(@"channelIndxAfter: %i", channelIndex);
    }


@end

我的问题是,如果我以这种方式调用channelIndex&#34; self.channeIndex ++&#34;它会发出警告:

  

格式指定类型&#39; int&#39;但是这个论点有类型&#39; NSInteger *&#39;   (又名&#39;长*&#39;)

如果我这样打电话&#34; channelIndex ++&#34;,这将正常工作。

奇怪的是,我有另一个静态NSMutableArray channelsDataArray,如果我只是调用

[self.channelsDataArray addObject:desiredValuesDict];

它可以正常地将对象添加到var中。但是,如果我只是使用

[channelsDataArray addObject:desiredValuesDict];

它不会显示任何警告,但channelsDataArray将为nil,并且不能将desiredValuesDict分配给它。

问题:我应该何时添加自己的前缀?为什么它们都是静态变量但是必须添加自己,另一个不要?

1 个答案:

答案 0 :(得分:2)

[原评论:]

该错误表明您有另一个@interface(在.h文件中),并且您已在该文件中声明了一个与您声明的全局变量同名的实例变量引用的文件。您需要删除其中一个,这取决于您的需求。

HTH