[iphone][memo]なんかメモリ参照がおかしい件

( iPhone )

なんか迷ってしまったのです。

1.NSDataからNSStringに変換して文字列を結合してメンバ変数に入れておく。 2.他のメソッドからそのメンバ変数を関数に引数にして処理を行う。

こんな簡単なことを1時間以上のも悩んだ挙げ句結局答えはわからずじまいでした。 いったいなんだったんでしょうか???

test.h

#import 

@interface CameraViewController : UIViewController  {
    IBOutlet UIImageView *imageView;
    
    NSString *_imageUrl;
}

@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) NSString *_imageUrl;

- (IBAction)pushButtonCamera;
- (IBAction)pushButtonSaveImage;
- (IBAction)pushButtonPostImage;

@end

test.m

@synthesize _imageUrl;
- (IBAction)pushButtonPostImage
{
    _imageUrl = [NSString stringWithFormat:@"http:/hogehoge/?s=aaaa+%@%@", 
                 UPLOAD_SERVER_URL, 
                 [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    NSLog(@"%@ が押された", [alertView buttonTitleAtIndex:buttonIndex]);
    NSLog(@"buttonIndex = %d", buttonIndex);

    // for logpi
    if (buttonIndex == 1) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:_imageUrl]];
    }
}

これだとエラーが発生

2011-07-18 11:07:48.357 Urameshiya002[15513:207] -[__NSCFType length]: unrecognized selector sent to instance 0x4e3c5c0
2011-07-18 11:07:48.374 Urameshiya002[15513:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType length]: unrecognized selector sent to instance 0x4e3c5c0'

NSDataをNSStringに変換したときのメモリ参照がうまくいってなかったのかなと思ってたけど以下の方法で 単純に文字列だけくっつけて見て試した見た。

    _imageUrl = [NSString stringWithFormat:@"http:/hogehoge/?s=aaaa+%@%@", 
                 UPLOAD_SERVER_URL, 
                 @"test"];

そうすると急に固まってしまい、[UIApplication sharedApplication]部分で以下のメッセージが出力された・・・ やっぱ参照方法が悪いみたいなんだね、、、、

Thread:1:Program received signal: "EXC_BAD_ACCESS"

そんでもって、文字列の結合処理は「alertView」のデータを利用するところで行うようにしてみた。

- (IBAction)pushButtonPostImage
{
    _imageUrl = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == 1) {
        NSString *url = [[NSString alloc] initWithFormat:@"http://logpi.jp/title/232?status=OhMyGod+%@%@", UPLOAD_SERVER_URL, _imageUrl];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
    }
}

うまくいった。。。 どういうことでしょうか・・・。