【问题标题】:Cannot pass NSString to DetailViewController [duplicate]无法将 NSString 传递给 DetailViewController [重复]
【发布时间】:2013-09-17 10:43:54
【问题描述】:

MasterViewController.h

NSString *quality;

MasterViewController.m

#import DetailViewController.h

-(void)viewDidLoad {
    quality = [NSString stringWithFormat:@"string to pass"];

    ...

}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        DetailViewController *detailView = [segue destinationViewController];

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        theList = [app.listArray objectAtIndex:indexPath.row];

        detailView.theList = theList;

        detailView.streamQuality = quality;

    }
}

DetailViewController.h

@property (nonatomic ,retain) NSString *streamQuality;

DetailViewController.m

@synthesize streamQuality;

NSLog(@"Final: %@", streamQuality);

输出:大多数我得到“线程 1:EXC_BAD_ACCESS(code=2, address=0x10)”
或类似的随机 《决赛:复制音频地址》



但是这很好用:

detailView.streamQuality = @"hello";

【问题讨论】:

  • 什么是质量?在将它传递给 detailViewController 之前,你检查过它的值吗?
  • 您在使用 ARC 吗?如果不是,则 stringWithFormat 返回自动释放的字符串,因此您需要保留它。尝试使用: quality = [[NSString stringWithFormat:@"string to pass"] retain];.

标签: ios objective-c cocoa-touch nsstring


【解决方案1】:

您应该创建一个属性来保留NSString 对象质量。 例如:

@property (nonatomic ,copy) NSString *quality;

当然你必须合成它:

@synthesize quality;

然后你应该使用这个属性来设置字符串。像这样:

self.quality = @"string to pass";

【讨论】:

  • 又是同样的问题...
  • @Lorenz : 你在哪一行崩溃了?
  • 0x1f7dd85: movl 16(%edx), %edx - 线程 1: EXC_BAD_ACCESS(code=2, address=0x10)
  • @Lorenz:你用断点检查过吗?在哪一行(从您在问题中添加的行),您遇到了崩溃?
  • 从没有格式的文字创建字符串有什么意义?只需使用文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多