Iphone NSString变量值在重新分配后消失

Iphone NSString变量值在重新分配后消失,iphone,objective-c,ios,cocoa-touch,nsstring,Iphone,Objective C,Ios,Cocoa Touch,Nsstring,发生了一些奇怪的事情。当我将NSString重新分配给代码底部附近的子字符串变量时。在输出中,subString的值似乎为空。我不知道objectAtIndex是否返回了一些奇怪的东西,或者是内存问题。如果我创建了一个新变量而不是重新分配子字符串的值,我可以在输出控制台中看到正确的值。如果有人能帮我解决这个问题。非常感谢 NSString *subString = @""; if ([text length] > 0) { UITextRange *selectedRange =

发生了一些奇怪的事情。当我将NSString重新分配给代码底部附近的子字符串变量时。在输出中,subString的值似乎为空。我不知道objectAtIndex是否返回了一些奇怪的东西,或者是内存问题。如果我创建了一个新变量而不是重新分配子字符串的值,我可以在输出控制台中看到正确的值。如果有人能帮我解决这个问题。非常感谢

NSString *subString = @"";
if ([text length] > 0) 
{
    UITextRange *selectedRange = [_textView selectedTextRange];
    UITextPosition *cursorPosition = [_textView positionFromPosition:selectedRange.start offset:0];
    UITextRange *subTextRange = [_textView textRangeFromPosition:_textView.beginningOfDocument toPosition:cursorPosition];
    subString = [textView textInRange:subTextRange];
}

NSLog(subString);
NSLog(@" %s", [subString hasSuffix:@" "] ? "TRUE" : "FALSE");
BOOL hasSpaceSuffix = [subString hasSuffix:@" "];
NSLog(@" %s", _taggingInProgress ? "TRUE" : "FALSE");
NSArray *substringArray = [[subString componentsSeparatedByString:@" "] retain];
if ([substringArray count] > 1) {
    int index = [substringArray count];
    if ([[substringArray objectAtIndex:index-1] isEqualToString:@" "])
    {
        NSLog(@"1st");
        subString = [substringArray objectAtIndex:index-2];
        NSLog(subString);
    }
    else
    {
        NSLog(@"2nd");
        subString = [substringArray objectAtIndex:index-1];
        NSLog(subString);
    }
    NSLog(@"AFTER");
    NSLog(subString);
}

我认为您需要使用:

subString = [NSString stringWithString:[substringArray objectAtIndex:index]];

…修复了…

@Cake:显然不是,因为代码包含
retain
,这在ARC中是非法的。可能数组不包含任何NSString。请尝试添加此跟踪
NSLog(@“STRING array:%@,[substringArray description])初始化子字符串数组并报告其输出后,请…而不是键入NSLog。。。您可以向NSLog添加更多描述吗?与NSLog类似(“如果text.length>0,则子字符串的值为:”,子字符串)。你的输出很难读。另外,试着把你的输出放在问题中并格式化它。只是一个提示:永远不要将字符串变量直接传递到NSLog中。至少,您需要执行
NSLog(@“%@”,子字符串)
。NSLog的第一个参数是一个格式字符串,这意味着它是经过特殊处理的,因此如果传递任意字符串,可能会导致意外的结果。