0

私は 4 時間の間に頭がおかしくなり、本当に助けが必要です。コードは次のとおりです。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    //check if strGroup has prefix and suffix #
    BOOL result;

    result = [strGroup hasPrefix: @"#"];

    if (result)
    {
        result = [strGroup hasSuffix: @"#"];

        if (result)
        {

            NSMutableString* string = [NSMutableString stringWithString: strGroup];
            str = [strGroup substringWithRange: NSMakeRange (1, [string length]-2)];

            strToHoldAllContact = [NSString stringWithFormat:@"%@",str];
        }
    }
    NSLog(@"strToHoldAllContact=%@",strToHoldAllContact);
}

の値をstrToHoldAllContact正しく取得しています。しかし、strToHoldAllContact別のメソッドからアクセスしようとすると、次のエラーが発生します。

[CFString respondsToSelector:]: message sent to deallocated instance 0x856f2a0
4

4 に答える 4

1

使用する

strToHoldAllContact = [NSString stringWithFormat:@"%@",str];
[[strToHoldAllContact retain] autorelease];

そしてリリースを忘れます。

于 2012-04-28T09:11:07.653 に答える
0

文字列を初期化または設定する場合は常にこれ[strToHoldAllContact retain];を行い、使用が終わったら解放することを忘れないでください

于 2012-04-28T07:50:22.030 に答える
0

交換するだけ

strToHoldAllContact = [NSString stringWithFormat:@"%@",str];

strToHoldAllContact = [[NSString alloc] initWithFormat:@"%@",str];

そして、不要になったら解放してください。

于 2012-04-28T08:55:22.777 に答える
0

ARC では、.h で strToHoldAllContact を次のように宣言します。

@property(strong) NSString *strToHoldAllContact;

.m では、(@synthesize の後に) 使用してself.strToHoldAllContact = [NSString stringWithFormat:@"%@",str]; ください。この方法では問題が発生しません。

ARC を使用しない場合、.h で strToHoldAllContact を次のように宣言します。

@property(retain) NSString *strToHoldAllContact;

ARC in.m ファイルと同じ方法で使用します。

于 2012-04-28T09:31:12.957 に答える