我有一个关于NSMutableArray的问题,它的alloc / init是一个全局的东西。
我想做什么:只要二进制变量“permission”设置为true,就可以使用加速度值填充NSMutableArray。当我将权限设置为false然后将数组写入我通过电话发送电子邮件的文件时,我还想停止数组中的“录制”。我整天编码(我可能不是最有经验的编码员“并修复了许多麻烦,如许可设置,附件中没有文件(它是零,tadaaa)使用这个论坛但是对于这个特殊的问题,我似乎无法找到解决方案。
关键是,附件是零,我想不出解决方案。
我在.m文件的开头跟进:
BOOL permission = NO; // key variable to enter recording / not recording state
int i = 0; //used to determine place in dataArray
NSMutableArray *dataArray; // axis values get dumped in here
开始录制,
- (void)recordStart { //setting permission to yes
permission = YES;
}
这允许加速计:UIAccelerometer填充dataArray:
(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
if (permission == YES) {
// NSLog(@"%f"@"%f"@"%f",acceleration.x,acceleration.y,acceleration.z);
NSString *valueString = [NSString stringWithFormat:@"%f, %f,
%f",acceleration.x,acceleration.y,acceleration.z];
[dataArray addObject:valueString];
// NSLog(@"%i",i);
NSLog(@"Array Count: %d", [dataArray count]);
}
}
NSLog总是返回0,因此数组为空并且stop方法无法将数组写入文件,因为它是nil:
- (void)recordStop { //setting permission to no
NSLog(@"Array Count: %d", [dataArray count]);
[[dataArray componentsJoinedByString:@",\n"] writeToFile:[self setFileLocation] atomically:YES encoding:NSUTF8StringEncoding error:NULL];
//代码省略
我是否需要在其他地方分配数组然后全局?我无法在加速度计中执行此操作:因为它会在每次触发时重新执行此操作(我设置的频率为100Hz)
有什么建议吗?
THX!
答案 0 :(得分:0)
你的问题很少但很重要。一开始,你做了
NSMutableArray *dataArray;
初始化你的可变数组。问题是,这只会在RAM中为对象创建一些空间而不是初始化它。所以,你没有初始化对象,所以它是零。这是正确的方式:
NSMutableArray *dataArray = [[NSMutableArray alloc] init];
更改,编译并运行它,它应该可以工作。