Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为UILabel赋值时模拟器崩溃_Iphone_Ios_Cocoa Touch - Fatal编程技术网

Iphone 为UILabel赋值时模拟器崩溃

Iphone 为UILabel赋值时模拟器崩溃,iphone,ios,cocoa-touch,Iphone,Ios,Cocoa Touch,我有一段代码,由于某种原因,每当我试图更改标签的文本时,它都会崩溃 - (void) viewDidLoad { [super viewDidLoad]; NSString * path = [[NSBundle mainBundle] pathForResource:@"Subs" ofType:@"plist"]; NSMutableDictionary * modelDict = [NSMutableDictionary dictionaryWithContents

我有一段代码,由于某种原因,每当我试图更改标签的文本时,它都会崩溃

- (void) viewDidLoad {
    [super viewDidLoad];
    NSString * path = [[NSBundle mainBundle] pathForResource:@"Subs" ofType:@"plist"];
    NSMutableDictionary * modelDict = [NSMutableDictionary dictionaryWithContentsOfFile:path];
    NSDictionary * yearDict = [modelDict valueForKey:Sub_Model];
    for (NSString * yearKey in yearDict) {
        NSDictionary * sizeDict = [yearDict valueForKey:yearKey];
        mount_depth = round([[[sizeDict valueForKey:Sub_Size] objectForKey:@"Mounting Depth"] floatValue]);
        displacement = round([[[sizeDict valueForKey:Sub_Size] objectForKey:@"Displacement"] floatValue]);
        sealed_min = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Sealed Min."] floatValue];
        sealed_max = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Sealed Max."] floatValue];
        ported_min = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Ported Min."] floatValue];
        ported_max = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Ported Max."] floatValue];
        minportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."];
        maxportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."];
    }
    // [self loadEnclosure];
    portlenLbl.hidden = FALSE;
}
然后,我在导航项上有一个分段控件,可以根据用户选择的内容更改标签,并且每当用户选择非默认标签时,程序就会崩溃

- (IBAction) boxSize:(id)sender {
    // [self loadEnclosure];
    switch (self.boxControl.selectedSegmentIndex) {
        case 0:
            portlenLbl.text = (@"%@", minportlen);
            break;
        case 1:
            portlenLbl.text = (@"%@", maxportlen);
            break;
        default:
            break;
    }
}
我还应该补充一点,在达到这一点之前,有多个视图,它们是使用类似以下方法调用的:

- (IBAction) GetBox:(id)sender {
    K_Box * KView = [[K_Box alloc] initWithNibName:nil bundle:nil];

    KView.Num_Subs = self.Num_Subs;
    KView.Box_Type = self.Box_Type;
    KView.Box_Shape = self.Box_Shape;
    KView.Sub_Model = self.Sub_Model;
    KView.Sub_Size = self.Sub_Size;
    [self presentModalViewController:KView animated:YES];
}

你真正的问题在这里:

minportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."];
maxportlen = [[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."];
objectForKey:
返回一个自动删除的对象,您直接将其分配给实例变量。当您的应用程序到达
boxSize:
方法时,这些值已超出范围,因为它们已从管理它们的自动释放池中排出。因此,解决方案是简单地
保留
objectForKey:
的返回值,然后直接将其分配给实例变量:

minportlen = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Min. Port Len."] retain];           
maxportlen = [[[sizeDict valueForKey:Sub_Size] objectForKey:@"Max. Port Len."] retain];

(当然,如果您将实例变量定义为属性,则应使用指定的属性设置程序。)

只需使用portlenLbl.text=[[NSString stringWithFormat:@“%@”,maxportlen]。
请记住,无论何时设置标签文本,都要使用上述语法。

arr没有足够的信誉来编辑文章。请使用代码标记,并将其对齐得更准确一点。//编辑:谢谢@Abitobvious是的,当你发布时我正在编辑它,因为我看到它很时髦。对不起。你意识到了吗,有一个实时预览?我当时正在编辑当你们在编辑的时候,ng:)对不起,这太有趣了,三四个人在编辑同一篇文章:'Dor[NSString stringWithFormat:@“%@”,maxportlen];如果他喜欢采用一种格式,)//是的,我知道,我只是为了完整性而评论一些帖子^p@iPortable是的,但OP似乎不想这样做。最初涉及的文本更多,但我删除了它以进行调试。这样做仍然会崩溃。当我在头文件中声明minportlen和maxportlen时,我将它们设置为@property(非原子,保留)这与上面的相同吗?@Ian Oswald您正在执行直接实例变量赋值,这对赋值没有任何影响,因此您可以使用我的解决方案,也可以通过
self
使用属性设置器。使用此赋值仍有相同的问题。使用
stringWithFormat:@“%@”
对于已经是NSString的对象来说,这是不必要的开销——没有格式,那么为什么要让设备计算格式字符串呢?