所以这是相关代码的部分样本。
static NSMutableArray *radioInputArray;
static NSMutableArray *buttonsArray;
- (IBAction)lookForRadioButtons:(id)sender {
// NSLog(@"Testing");
NSError *error;
NSString *radiostr = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"getRadios" ofType:@"txt"] encoding:NSASCIIStringEncoding error: &error] ;
if (radiostr == nil)
{
NSLog (@"Error! %@", error);
}
else
{
NSLog(@"%@",radiostr);
NSString *radiotxt= [webView stringByEvaluatingJavaScriptFromString:radiostr];
NSLog(@"%@", radiotxt);
NSArray *myRadios = [radiotxt componentsSeparatedByString:@"::"];
[radioInputArray addObjectsFromArray:myRadios];
NSLog(@"%d", myRadios.count);
NSLog(@"Number of buttons in global radio array %d", radioInputArray.count);
NSLog(@"%d", scrollViewer.subviews.count);
}
}
所以它没有抛出任何异常并且似乎正常工作,除了addObjectsFromArray:
之后,我在全局NSMutableArray
中的计数为0(myRadios中的计数= 56)。我很确定他们在这一点上应该是平等的,但事实并非如此。我已将NSMutableArray
声明为靠近顶部,以便可以全局访问。我错过了分配和初始化这个的东西吗?它是不是像C#那样自动执行此操作?再一次,这是我第一次从Windows编程进入Objective-C世界,所以请保持温和但随意批评。
答案 0 :(得分:1)
您的两个全局数组未初始化。
行
static NSMutableArray *radioInputArray;
static NSMutableArray *buttonsArray;
只需将两个变量定义为NSMutableArray
的指针,因此您需要让它们指向类NSMutableArray
的实际实例。
在初始化代码中的某个位置,或通过访问器(最好是类方法),您应该将变量设置为空的,新分配的NSMutableArray
。
这是一种方法:
+ (NSMutableArray*)radioInputArray
{
if (!radioInputArray) {
radioInputArray = [[NSMutableArray alloc] init];
}
return radioInputArray;
}
然后在代码中使用访问器而不是全局变量。
答案 1 :(得分:0)
如果radioInputArray
为nil
,可能会发生这种情况,
你没有初始化数组
你需要添加
[[radioInputArray alloc] init];
在使用radioInputArray
执行任何操作之前
答案 2 :(得分:0)
初始化对象的好地方是" init"全局类中的方法
实施例
-(id)init
{
if (self=[super init]) {
self.globalAllArtworkArray=[[NSMutableArray alloc] init];
self.globalCollectionArray=[[NSMutableArray alloc] init];
self.globalLookbookArray=[[NSMutableArray alloc] init];
}
return self;
}
+(ASNGlobalClass *)shareManager
{
static ASNGlobalClass *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}