1

基本上,我试图通过自定义设置器将对象从主视图发送到详细视图。但是,一旦在详细视图中调用了 setter,应用程序就会立即崩溃。我不太擅长调试,但我认为这是因为对象没有进入设置器——它认为它是零。不过,这可能是错误的。

这是主视图中 segue 的代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showDetail"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    CCNewsItem *theNewsItem = self.listOfNewsItems[indexPath.row];
    NSLog(@"Preparing to pass: %@", theNewsItem);
    [[segue destinationViewController] setSelectedNewsItem:theNewsItem];

    }
}

这是详细视图中的设置器:

   - (void)setSelectedNewsItem:(CCNewsItem *)newItem
{
    if (self.selectedNewsItem != newItem) {
    self.selectedNewsItem = newItem;

    // Update the view.
    [self configureView];
    }
}

它完全在线崩溃- (void)setSelectedNewsItem:(CCNewsItem *)newItem。我已经非常确定被传递的对象是有效的(我将它记录下来以进行仔细检查,一切看起来都很好),但它似乎要么没有进入设置器,要么在它碰到它时以某种方式爆炸.

有任何想法吗?谢谢!

根据要求,这是日志/异常

这是我的 NSLog 在我试图传递的对象上显示的内容:

2013-11-02 14:18:23.660 Curtis Consulting[14862:60b] Preparing to pass: <CCNewsItem: 0x14e70580>

当应用程序在设置器的第一行停止时(我不知道为什么;我禁用了所有断点),它将 newItem (传递的对象)的值显示为:

newItem CCNewsItem *    nil 0x00000000
NSObject    NSObject        
_headline   NSString *  nil 
_body   NSString *  nil 
_url    NSURL * nil 

编辑 2

因为,据我所知,没有办法复制它显示的错误(在右侧的绿色栏中,但我没有打开任何断点),这是我的转录:

Thread 1: EXC_BAD_ACCESS (code=2, address=0x27c84ff8)
4

1 回答 1

2

在您的 setter 方法更改中:

if (self.selectedNewsItem != newItem) {
self.selectedNewsItem = newItem;

if (_selectedNewsItem != newItem) {
_selectedNewsItem = newItem;

因为您当前的代码有一个无限循环调用访问器方法。确保你知道 using是什么self.意思...

于 2013-11-02T18:48:37.257 回答