NSString从返回方法返回空

我有一个不寻常的问题,我不明白为什么:

我有以下的方法:

- (NSString*) copyAndReplaceOccurencesForProfileFromString: (NSString*)initialString toString:(NSString*)aString { aString = [NSString stringWithString:initialString]; DLog(@"PROFILE INITIAL HTML STRING: %@", initialString); aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_IMAGE//" withString:profileImageForHTML]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_NAME//" withString:profileBirthNameString]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_BIRTHDATE//" withString:profileDateOfBirthString]; return aString; } 

这是这样调用的:

  NSString *profileSection = [NSString string]; [self copyAndReplaceOccurencesForProfileFromString:htmlBody_profile toString:profileSection]; DLog(@"PROFILE MODIFIED HTML STRING: %@", profileSection); 

但“profileSection”string返回空。

在调用return之前,我必须指出“aString”中有值。

任何想法为什么发生这种情况? 谢谢 !

编辑 :看看

  NSString *profileSection = [NSString string]; //reference created 

再次在profileSection作为aString传入的方法中:

  aString = [NSString stringWithString:initialString]; //new reference created 

现在profileSection不能容纳string操作,因为引用不同。


让你的函数返回一个新的NSString。

 - (NSString*) copyAndReplaceOccurencesForProfileFromString: (NSString*)initialString { NSString *aString = [NSString stringWithString:initialString]; DLog(@"PROFILE INITIAL HTML STRING: %@", initialString); aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_IMAGE//" withString:profileImageForHTML]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_NAME//" withString:profileBirthNameString]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_BIRTHDATE//" withString:profileDateOfBirthString]; return aString; } 

现在使用像:

 NSString *profileSection = [self copyAndReplaceOccurencesForProfileFromString:htmlBody_profile]; DLog(@"PROFILE MODIFIED HTML STRING: %@", profileSection); 

我想你误解了如何return作品。 它不处理从调用者传递的参数的值,而是确定方法调用完成后的值。 所以说你有一个方法-(id)someMethod ,然后像这样调用它:

id myValue = [self someMethod];

someMethod里面,有一个返回语句 – 返回值的右边是在调用方法或函数中赋给myValue的值。

要将此应用于您的情况,请更改您的方法,如:

  - (NSString*) replaceOccurencesOfProfileInString:(NSString *)initialString { NSString *aString = initialString; DLog(@"PROFILE INITIAL HTML STRING: %@", initialString); NSData *profileImageData = UIImagePNGRepresentation(profileImage); NSString *profileImageDataString = [profileImageData base64EncodedStringSingleLine]; NSString *profileImageForHTML = [NSString stringWithFormat:@"<p><b><img src='data:image/png;base64,%@' width='%f' height='%f'></b></p>", profileImageDataString, profileImage.size.width, profileImage.size.height]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_IMAGE//" withString:profileImageForHTML]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_NAME//" withString:profileBirthNameString]; aString = [aString stringByReplacingOccurrencesOfString:@"//PROFILE_BIRTHDATE//" withString:profileDateOfBirthString]; return aString; } 

然后将您的呼叫代码更改为:

 NSString *profileSection = [self replaceOccurencesOfProfileInString: htmlBody_profile]; 

现在,你已经创build了一个新的NSString实例,并将它返回给调用者,在那里它被分配给profileSectionvariables。

希望这可以帮助!