【问题标题】:fill NSMutableArray with Accelerometervalues?用加速度计值填充 NSMutableArray?
【发布时间】:2011-09-20 05:44:26
【问题描述】:

我有一个关于 NSMutableArray 的问题,它把 alloc / init 作为一个全局的东西。

我想要做的:只要将二进制变量“permission”设置为 true,就可以用加速度值填充 NSMutableArray。当我将权限设置为 false 时,我还想停止数组中的“记录”,然后将数组写入我通过电话通过电子邮件发送的文件。我整天编码(我可能不是最有经验的编码员”并修复了很多麻烦,比如权限设置,附件中没有文件(它是 nil,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;
       }

这允许 accelerometer: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)

有什么建议吗?

谢谢!

【问题讨论】:

    标签: nsmutablearray nsarray accelerometer


    【解决方案1】:

    您的问题很小但很重要。一开始,你做到了

    NSMutableArray *dataArray;
    

    初始化你的可变数组。问题是,这只会在 RAM 中为对象腾出一些空间,而不是对其进行初始化。所以,你没有初始化对象,所以它是 nil。这是正确的方法:

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

    更改它,编译并运行它,它应该可以工作。

    【讨论】:

    • 感谢您的快速帮助,我之前确实尝试过,但我收到编译器错误:“Initializer element is not a compile-time constant”
    • 是否可以将开始/停止放在一个按钮上,从而使用具有一个功能(加上加速度计)的数组并以不同的方式检索值? Java 提供 FileWriter,有没有类似 Obj.C 2.0 的东西?
    • 你说你定义了代码 BOOL 权限 = NO; // 进入录音/不录音状态的关键变量 int i = 0; //用于确定dataArray中的位置 NSMutableArray *dataArray; // 轴值在 .m 文件的开头被转储到此处。我想我知道你做错了什么。尝试将该代码移动到 - (id)init 方法中。
    • 呃……没有那个方法?我怎么称呼它?我使用了 Apples FlipView 模板,也许有帮助?
    • 那你需要把它移到viewDidLoad中。它与 init 相同(在开始时被调用),但用于视图控制器。因此,将它移到那里,并使变量全局可用,在 .h 文件中声明变量。 @interface Example (UIViewController) { NSMutableArray *dataArray; } 在那里你应该声明你所有的全局变量。在 .m 文件中,删除数据数组前面的 NSMutableArray *,因为我们已经声明了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 2012-09-19
    相关资源
    最近更新 更多