NSMutableString stringByReplacingOccurrencesOfString警告

时间:2009-10-30 00:10:49

标签: iphone objective-c

我有一个RSS解析器方法,我需要从我提取的html摘要中删除空格和其他废话。我有一个NSMutableString类型'currentSummary'。我打电话的时候:

currentSummary = [currentSummary 
        stringByReplacingOccurrencesOfString:@"\n" withString:@""];

Xcode告诉我“警告:从不同的Objective-C类型分配”

这有什么问题?

3 个答案:

答案 0 :(得分:38)

如果currentSummary已经是NSMutableString,则不应尝试为其分配常规NSString(stringByReplacingOccurrencesOfString:withString:的结果)。

而是使用可变等效replaceOccurrencesOfString:withString:options:range:,或在分配前添加对mutableCopy的调用:

// Either
[currentSummary replaceOccurencesOfString:@"\n" 
                               withString:@"" 
                                  options:NULL
                                    range:NSMakeRange(0, [receiver length])];

// Or
currentSummary = [[currentSummary stringByReplacingOccurrencesOfString:@"\n"
                                                            withString:@""]
                  mutableCopy];

答案 1 :(得分:3)

当然,这对于嵌套元素非常有用:

*的 被修改 *

// Get the JSON feed from site
myRawJson = [[NSString alloc] initWithContentsOfURL:[NSURL 
            URLWithString:@"http://yoursite.com/mobile_list.json"] 
            encoding:NSUTF8StringEncoding error:nil];

// Make the content something we can use in fast enumeration
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary * myParsedJson = [parser objectWithString:myRawJson error:NULL];
[myRawJson release];
allLetterContents = [myParsedJson objectForKey:@"nodes"];

    // Create arrays just for the title and Nid items
    self.contentTitleArray = [[NSMutableArray alloc]init];

    for (NSMutableDictionary * key in myArr) {
        NSDictionary *node = [key objectForKey:@"node"];
        NSMutableString *savedContentTitle = [node objectForKey:@"title"];        

        // Add each Title and Nid to specific arrays
        //[self.contentTitleArray addObject:contentTitle];

        //change each item with & to &
        [self.contentTitleArray addObject:[[savedContentTitle      
                                stringByReplacingOccurrencesOfString:@"&" 
                                withString:@"&"] 
                                mutableCopy]];

    }

以下代码,如上面的用例所示可能会有所帮助。

[self.contentTitleArray addObject:[[contentTitle 
                                    stringByReplacingOccurrencesOfString:@"&" 
                                    withString:@"&"] 
                                    mutableCopy]];

答案 2 :(得分:0)

这通常意味着您在(在本例中)currentSummary的定义中删除了星号。

所以你最有可能:

NSMutableString currentSummary;

当您需要时:

NSMutableString *currentSummary;

在第一种情况下,由于Objective-C类是在类型结构中定义的,因此编译器认为您尝试将NSString分配给结构。

我经常打扰这个错字。