2011-09-20 74 views
0

我有一个关于NSMutableArray的问题,它是alloc/init作为一个全局事物。用Accelerometervalues填充NSMutableArray?

我想要做的是:只要二进制变量“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,因此该数组为空和止动方法不能写入文件阵列,因为它是零:

- (void)recordStop { //setting permission to no 

NSLog(@"Array Count: %d", [dataArray count]); 

[[dataArray componentsJoinedByString:@",\n"] writeToFile:[self setFileLocation] atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 

//代码ommitted

我是否需要的Alloc阵列其他地方,那么全球范围内?我不能在加速度计功能中做到这一点,因为它会重新做它每次触发(我设置100Hz的频率)

任何建议吗?

thx!

回答

0

你的问题很少,但很重要。在开始时,你做了

NSMutableArray *dataArray; 

初始化你的可变数组。问题是,这只会在对象的RAM中留下一些空间,而不是初始化它。所以,你没有初始化这个对象,所以它是零。下面是正确的方法:

NSMutableArray *dataArray = [[NSMutableArray alloc] init]; 

改变这种状况,编译并运行它,它应该工作。

+0

感谢您的快速帮助,我曾尝试过,但我得到一个编译器错误:“初始化元素不是一个编译时常量” – coernel

+0

是否可能将启动/停止在一个按钮上,因此使用有一个函数的数组(加上加速度计),并以某种方式以不同的方式检索值? Java提供FileWriter,Obj.C 2.0有没有类似的东西? – coernel

+0

你说你定义了代码 BOOL权限= NO; //键入变量以进入记录/不记录状态 int i = 0; //用于确定dataArray中的位置 NSMutableArray * dataArray; //轴值在这里' '在.m文件的开头被转储。我想我知道你做错了什么。尝试将该代码移动到 - (id)init方法中。 –