我有一个NSString,我试图在XCode中的Web View上加载网页。但是,我需要用下划线替换NSString中的空格,我还需要用“%27”替换所有撇号。然后,我需要追加到fullURL NSString的末尾。每当它执行使NSString替换的代码部分时,什么都不会被替换。它与原始NSString保持一致。当我试图追加时,它不会附加。
.h文件:
@interface WikipediaViewController : UIViewController
@property (weak, nonatomic) NSString* artistName;
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
使用NSString替换的方法并附加在其中:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *fullURL = @"en.wikipedia.org/wiki/";
[artistName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
[artistName stringByReplacingOccurrencesOfString:@"'" withString:@"%27"];
[fullURL stringByAppendingString:artistName];
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
}
哦,同样,artistName变量是从不同的类初始化的,所以假设它已经包含了信息。
谁能告诉我为什么这不起作用?感谢。
答案 0 :(得分:5)
[artistName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
实际上会返回一个你需要捕获的字符串,所以。
NSString *myNewString = [artistName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
字符串在许多语言中都是不可变的,因此方法实际上不会修改底层字符串。
答案 1 :(得分:2)
首先,你的财产是一个弱财产,很可能是错误的。让它复制而不是弱。然后,不是编写artistName来访问iVar而是使用self.artistName来访问getter(这是最佳实践)。
其次 - 最重要的是 - 通过setter将stringByReplacing ...的返回值赋给你的iVar(再次是self.artistName)。 现在你只调用没有做任何事情的方法,因为它不会改变字符串本身,它给出了一个带有所做更改的字符串的新实例。在您的情况下,永远不会使用返回值。
所以,使用
self.artistName = [self.artistName stringByReplacing.....];
和
fullURL = [fullURL stringByAppending....];
但是因为artistName是一个弱属性,所以字符串将消失,因此不会附加到你的fileURL。
所以制作你的财产副本
@property (nonatomic, copy) NSString *artistName;
(我想知道为什么你的代码首先起作用,因为使用最新的Xcode和编译器版本,你的属性应该自动合成为具有下划线前缀的iVar(在你的情况下是_artistName)。所以只写artistName不应该工作,除非你以这种方式合成。)
答案 2 :(得分:1)
我已编辑您的代码以使其正常工作
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *fullURL = @"en.wikipedia.org/wiki/";
artistName = [artistName stringByReplacingOccurrencesOfString:@" " withString:@"_"];
artistName = [artistName stringByReplacingOccurrencesOfString:@"'" withString:@"%27"];
fullURL = [fullURL stringByAppendingString:artistName];
NSURL *url = [NSURL URLWithString:fullURL];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];
}
请记住stringByReplacingOccurrencesOfString返回一个你必须保存的字符串,在你的情况下用新的字符串替换旧的artistName字符串。