3

这是我的@interface def;

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

这是我的@implementation:

@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 并包括=在输入 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 回答