我从Xcode收到以下错误:
Couldn't compile connection: <IBCocoaTouchOutletConnection:0x401538380
<IBProxyObject: 0x40154a260> => categoryPicker => <IBUIPickerView: 0x4016de1e0>>
Run Code Online (Sandbox Code Playgroud)
我已经将它缩小到故事板中的单个插座连接.我的代码(大约30个具有许多其他连接的视图)编译并运行正常,直到我从UIPicker添加到视图的categoryPicker属性的连接.选择器本身也工作正常,我只是无法重新加载它没有得到这个连接工作:
@interface FiltersTableViewController : UITableViewController <UIPickerViewDataSource, UIPickerViewDelegate> {
NSFetchedResultsController *fetchedResultsController;
FilterTableViewController *filterView;
AppDelegate *appDelegate;
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, strong) FilterTableViewController *filterView;
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, weak) IBOutlet UIPickerView *categoryPicker;
- (void)configureCell:(FilterTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath;
- (void)performFetch;
@end
Run Code Online (Sandbox Code Playgroud)
UIPickerView位于UITableViewCell中.这是故事板的图像,从"categoryPicker"到"FiltersTableViewController"的连接导致错误:
感谢您提供有关如何调试的任何想法或建议!
编辑:我删除了连接并添加了一行到numberOfComponentsInPickerView:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
categoryPicker = pickerView;
return 1;
Run Code Online (Sandbox Code Playgroud)
}
这现在有效!但我想了解为什么连接不起作用以及错误消息的含义.现在这对我来说似乎是一个骗局,因为我在其他地方使用IB连接来获取对象引用.
编辑2:连接原型单元格会产生此错误:非法配置:连接"单元格"不能将原型对象作为其目标.不确定这是否是Xcode 4.5中的新功能.
我有一个带有segue的UITableViewController,我正在尝试获取当前选定的行:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([[segue identifier] isEqualToString:@"EditFilterElementSegue"]){
// Get the element that was clicked and pass it to the view controller for display
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
Element *element = [fetchedResultsController objectAtIndexPath:selectedIndexPath];
FilterElementTableViewController *vc = segue.destinationViewController;
vc.filter = filter;
vc.element = element;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是indexPathForSelectedRow返回nil.文档说"如果索引路径无效",则返回nil.如果我添加:
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:0];
selectedIndexPath = [self.tableView indexPathForSelectedRow];
Run Code Online (Sandbox Code Playgroud)
selectedIndexPath有效.所以,我现在假设该行以某种方式未被选中.任何人都可以告诉我如何判断是否是这种情况以及可能导致它的原因?
这段代码工作正常,直到我转换为使用NSFetchedResultsController(否则它正在工作).我还在几个其他表视图控制器中使用indexPathForSelectedRow,它可以正常工作(其中一个也使用NSFetchedResultsController).
我也试过打破didSelectRowAtIndexPath,但同样的事情发生在那里.(预计因为它是在prepareForSegue之后调用的.)
我不时尝试添加新的数据模型版本,但菜单项丢失了。似乎“编辑器”菜单应该根据所选文件而更改,但有时不会发生。过去,我随机单击,清理,构建等,最后又在我不知道发生了什么的情况下再次出现。今天,似乎重新启动Xcode可以修复它,但是我不知道这是否始终有效。下面是两个屏幕截图,第一个显示错误的菜单,第二个显示正确的菜单。在这两种情况下都选择了我的数据模型。其他人看到了吗?是错误,还是我缺少某些设置或选择?
ios ×2
xcode ×2
core-data ×1
datamodel ×1
null ×1
objective-c ×1
storyboard ×1
uitableview ×1
versioning ×1
xcode4.2 ×1