Ios 静态int和静态NSArray的访问方式不同
在这个演示代码下面,流程的逻辑性并不重要Ios 静态int和静态NSArray的访问方式不同,ios,objective-c,Ios,Objective C,在这个演示代码下面,流程的逻辑性并不重要 @interface ViewController ()<UITableViewDataSource, UITableViewDelegate> @end static int channelIndex = 0; static NSMutableArray *channelsDataArray = nil; @implementation ViewController - (void)getSomething {
@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
将对象添加到变量中可以正常工作
[channelsDataArray addObject:desiredValuesDict];
它不会显示任何警告,但channelsDataArray将为零,并且无法将所需的值Dict分配给它
问题:我应该在什么时候添加self前缀?为什么它们都是静态变量,但一个必须添加self,另一个不添加?[最初是注释:]
该错误表明您有另一个@接口
(在.h
文件中),并且您在该文件中声明了一个实例变量,其名称与在引用文件中声明的全局变量相同。您需要删除其中一个,这取决于您需要什么
HTH我猜您还有另一个
@界面
(在.h
文件中)。读了这些,一切都会变得显而易见。如果没有,请查找实例变量和全局变量之间的差异。如果在那之后仍然卡住,请编辑问题以包含其他界面,毫无疑问,有人会帮助您。当然,如果没有其他界面,我猜是错的…@CRD你完全正确!我在.h文件中声明了channelsDataArray,并在接口()和实现之间声明了channelDataArray。这是c类型的全局变量。非常感谢你,你可以把你的答案贴在我的问题下面,我会投票给你!
[channelsDataArray addObject:desiredValuesDict];