IOS NSString属性在引用类时始终为零

时间:2012-04-19 04:16:00

标签: objective-c ios nsstring alassetslibrary

这是我的@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时,stinkin'的东西是零。我已经尝试了一百万种不同的方法来获取字符串变量作为缩略图的属性。我甚至尝试过self.imageCacheKeyBase = @“dave”。 Nuthin'。我已经尝试保留并保留保留(我知道这很愚蠢,但我正在尝试任何事情。我甚至尝试过简单地将该属性设为char *。

我整天都在研究这个问题。

请帮助。

2 个答案:

答案 0 :(得分:1)

在某个地方,有些东西是零。尝试NSLogging每个对象或数据类型的值。

NSLog(@"My first string is %@, the char is %s, the final string is %@", [_asset.defaultRepresentation.url absoluteString], c, self.imageCacheKeyBase);

答案 1 :(得分:0)

您似乎正在尝试在输入网址中获取所有内容并包含=。我建议不要转换为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];
}

我也会在.h中声明imageCacheKeyBase

@property (nonatomic, retain) NSString *imageCacheKeyBase;

除非你需要它是可变的。如果您确实需要它是可变的,那么在我上面的代码段中,将[NSString stringWithFormat...更改为[NSMutableString stringWithFormat...。由于您在此类中创建字符串,因此您只需要保留,这比复制更好。

此外,您在代码段中引用了self.urlString,但未在@interface中声明。也许你只是想在生成imageCacheKeyBase时将它作为临时局部变量?如果是这样,请将上面的代码段中的第一行更改为:

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

absoluteString返回一个自动释放字符串,因此无需释放它。