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
实例,并将它返回给调用者,在那里它被分配给profileSection
variables。
希望这可以帮助!