3

これが私の @interface 定義です。

@interface Thumbnail : UIView <NSCoding>{
    NSMutableString *imageCacheKeyBase;
}
@property (nonatomic, copy) NSMutableString  *imageCacheKeyBase;
@end

これが私の@実装です:

@synthesize imageCacheKeyBase;

次に、Thumbnail クラスの initWithAsset というメソッドで:

self.urlString = [[_asset.defaultRepresentation.url absoluteString] copy];
c  = (char*)[urlString UTF8String];

while (*c != '=') 
    ++c;
++c;

self.imageCacheKeyBase = [NSString stringWithFormat:@"%s_", c];

そして、Thumbnail を割り当てるクラスが、thumbnail.imageCacheKeyBase を参照しようとすると、厄介なことは nil になります。文字列変数をサムネイルのプロパティとして固定するために、私は何百万もの異なるアプローチを試みました。単純に self.imageCacheKeyBase = @"dave" も試しました。ヌッシン。私は保持と保持保持を試みました(私はそれがばかげていることを知っていますが、私は何でもしようとしていました.私は単純にプロパティをchar *.

私はこれを一日中研究してきました。

助けてください。

4

2 に答える 2

1

どこかで、何かがゼロです。各オブジェクトまたはデータ型の値を NSLogging してみてください。

NSLog(@"My first string is %@, the char is %s, the final string is %@", [_asset.defaultRepresentation.url absoluteString], c, self.imageCacheKeyBase);
于 2012-04-19T04:20:48.280 に答える
0

=入力 URL に含まれる までのすべてを取得しようとしているようです。UTF-8 文字列に変換する代わりに (言及していないこれを行う正当な理由がない限り)、次のようにすることをお勧めします。

self.urlString = [[_asset.defaultRepresentation.url absoluteString] copy];

NSRange range = [self.urlString rangeOfString@"="];
if (range.location != NSNotFound)
{
    self.imageCacheKeyBase = [NSString stringWithFormat:@"%s=", [self.urlString subStringToIndex:range.location];
}

imageCacheKeyBaseまた、次のように .h で宣言します。

@property (nonatomic, retain) NSString *imageCacheKeyBase;

変更可能にする必要がない限り。変更可能にする必要がある場合は、上記のスニペットで を に変更[NSString stringWithFormat...[NSMutableString stringWithFormat...ます。このクラスで文字列を作成しているため、コピーするよりも保持する必要があります。

また、self.urlStringコード スニペットで参照していますが、@interface. imageCacheKeyBase を生成している間、それを一時的なローカル変数にするつもりですか? その場合は、上記のスニペットの最初の行を次のように変更します。

NSString* urlString = [_asset.defaultRepresentation.url absoluteString];

absoluteString自動解放文字列を返すため、解放する必要はありません。

于 2012-04-19T04:57:22.937 に答える