iCarousel 数据源问题
Posted
技术标签:
【中文标题】iCarousel 数据源问题【英文标题】:iCarousel data source issue 【发布时间】:2013-08-15 13:02:06 【问题描述】:我开始使用iCarousel
,但出现了这个错误:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIView 0x8372530> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key dataSource.'
-
我添加了 QuartzCore 框架
将 iCarousel 复制到我的项目中
从示例中复制了 XIB
这个例子我用过iCarousel
我的代码:
#import <UIKit/UIKit.h>
#import "iCarousel.h"
@interface UsersViewController : UIViewController <iCarouselDataSource, iCarouselDelegate>
@property (strong, nonatomic) IBOutlet iCarousel *aCarousel;
@property (strong, nonatomic) IBOutlet UILabel *label;
@property (nonatomic) BOOL wrap;
@property (strong, nonatomic) NSMutableArray *animals;
@property (strong, nonatomic) NSMutableArray *descriptions;
- (IBAction)onTapBackButton:(id)sender;
@end
#import "UsersViewController.h"
@interface UsersViewController ()
@end
@implementation UsersViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
_wrap = NO;
self.animals = [NSMutableArray arrayWithObjects:@"Bear.png",
@"Zebra.png",
@"Tiger.png",
@"Goat.png",
@"Birds.png",
@"Giraffe.png",
@"Chimp.png",
nil];
self.descriptions = [NSMutableArray arrayWithObjects:@"Bears Eat: Honey",
@"Zebras Eat: Grass",
@"Tigers Eat: Meat",
@"Goats Eat: Weeds",
@"Birds Eat: Seeds",
@"Giraffes Eat: Trees",
@"Chimps Eat: Bananas",
nil];
return self;
- (void)viewDidLoad
[super viewDidLoad];
self.aCarousel.type = iCarouselTypeCoverFlow2;
// Do any additional setup after loading the view.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark - Main Actions
- (IBAction)onTapBackButton:(id)sender
[self dissmis];
#pragma mark - Main methods
- (void)dissmis
[self dismissViewControllerAnimated:YES completion:nil];
#pragma - mark iCarousel Delegate
- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel
return [self.animals count];
- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel
// limit the number of item views loaded concurrently (for performance)
return 7;
- (UIView*)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
// create a numbered view
view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.animals objectAtIndex:index]]];
return view;
- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel
return 0;
- (CGFloat)carouselItemWidth:(iCarousel *)carousel
// usually this should be slightly wider than the item views
return 240;
- (BOOL)carouselShouldWrap:(iCarousel *)carousel
return self.wrap;
- (void)carouselDidScroll:(iCarousel *)carousel
[self.label setText:[NSString stringWithFormat:@"%@", [self.descriptions objectAtIndex:carousel.currentItemIndex]]];
@end
【问题讨论】:
你在哪里设置轮播的代理和数据源? @Wain 我在 XIB 中将它们设置为拖到文件的所有者 【参考方案1】:我不知道到底是什么问题,但是在查看了其他几个帖子之后,我认为前 5 个可能是问题所在,希望对您有所帮助,祝您好运 broski
1.
我发现这个错误最常发生的地方是当你 从一个不是 xib 的所有者。
我的意思是你可能会调用类似这样的东西:
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil]; 您正在更改所有者,因此您必须确保该类 self 指的是具有“MyView”所需的所有 IBOutlet 属性。 通常这是在 Interface Builder 中完成的,但在这种情况下,你是 以编程方式设置您的所有者,这意味着您无法制作 IB中的连接。当 IBOutlets 不存在时,应用程序会尝试 建立这些连接并失败,给出您看到的错误。
我的建议(不知道您目前提供的任何信息)是 检查你是否在没有正确的情况下拨打了这个电话 IBOutlets。
2.
我已将界面生成器中的 UIControl 插座连接到 xib 的所有者中的 IBOutlet。出于某种原因,删除了 IBOutlet 来自所有者,但对插座的引用仍然悬而未决 西布。这总是会给我错误教训:当 删除实现中 vars 的任何出口,确保 解开 IB 中的相应连接
3.
我发现了问题,这是因为我在 AboutViewController,我没有声明那个按钮的属性。
4.
另外,当您重命名视图时,不要忘记删除 文件的所有者。它也可能引发此错误。
5.
已修复 - 转到 ios 模拟器 > 重置内容和设置
【讨论】:
非常有用的指导,但在我的情况下它不起作用。但是一些程序员可以在遇到意外问题的情况下使用它。 +1 杰森 G以上是关于iCarousel 数据源问题的主要内容,如果未能解决你的问题,请参考以下文章