小编ppi*_*one的帖子

使用RESTKit映射iTunes Search API结果

我正在尝试使用RestKit将iTunes Search API结果加载到自定义对象中.我为结果定义了一个简单的NSObject子类:

@interface LSiTunesResult : NSObject

@property (nonatomic) NSInteger itemID;
@property (nonatomic) NSInteger artistID;

@property (strong, nonatomic) NSString *title;
@property (strong, nonatomic) NSString *artistName;
@property (strong, nonatomic) NSString *collectionName;
@property (strong, nonatomic) NSString *itemDescription;

@property (strong, nonatomic) NSURL *imageURL;
@property (strong, nonatomic) NSURL *thumbnailURL;
@property (strong, nonatomic) NSURL *trackPreviewURL;
@property (strong, nonatomic) NSURL *trackViewURL;

//
+ (RKObjectMapping *)objectMapping;

@end
Run Code Online (Sandbox Code Playgroud)

为简单起见,我已经定义了对象映射

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[LSiTunesResult class]]; [mapping addAttributeMappingsFromDictionary:@{ @"artistName" : @"artistName" }];

我已经尝试了几种不同的方法来实际请求结果,使用自定义RKObjectManager和RKObjectRequestOperation.我使用RKObjectRequestOperation的简单示例如下所示:

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[LSiTunesResult objectMapping] …
Run Code Online (Sandbox Code Playgroud)

ios restkit itunes-search-api

6
推荐指数
1
解决办法
1111
查看次数

NSCollectionView不会滚动项目超过初始可见的rect

在尝试修复一些出色的macOS 10.13错误时,我遇到了现有应用程序的问题.我有一个小的NSCollectionView,看起来类似于日历应用程序中的小月历.它会显示天数并在点击时垂直滚动.但是,在macOS 10.13上,集合视图仅显示几行而不会滚动.我已经验证数据源被正确调用,它确实尝试加载其他项目 - 但不会滚动到它们.

我已经创建了一个小示例应用程序,它也演示了这个问题.这是一个基本的macOS应用程序,它通过Main故事板添加NSCollectionView,并具有从nib加载的通用NSCollectionViewItem类.主视图控制器中的整个代码是:

- (void)viewDidLoad {  
  [super viewDidLoad];  

  NSNib *nib = [[NSNib alloc] initWithNibNamed:@"FooCollectionViewItem" bundle:nil];  
  [self.collectionView registerNib:nib forItemWithIdentifier:@"foo"];  
}  
- (void)viewDidAppear {  
  [super viewDidAppear];  

  [self.collectionView reloadData];  
}  
- (void)setRepresentedObject:(id)representedObject {  
  [super setRepresentedObject:representedObject];  

}  
- (NSInteger)numberOfSectionsInCollectionView:(NSCollectionView *)collectionView {  
  return 1;  
}  
- (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {  
  return 2000;  
}  
- (NSCollectionViewItem *)collectionView:(NSCollectionView *)collectionView itemForRepresentedObjectAtIndexPath:(NSIndexPath *)indexPath {  
  FooCollectionViewItem *item = [collectionView makeItemWithIdentifier:@"foo" forIndexPath:indexPath];  
  item.fooField.stringValue = [NSString stringWithFormat:@"%ld", indexPath.item];  

  return item;  
}
Run Code Online (Sandbox Code Playgroud)

生成的应用程序如下所示:

在此输入图像描述

不幸的是,这完全是集合视图.滚动不会滚动任何其他项目.我已将示例应用程序上传到https://www.dropbox.com/sh/wp2y7g0suemzcs1/AABVKfTZq54J7riy6BR7Mhxha?dl=0,以防有用.任何想法为什么这对我来说打破10.13?

cocoa objective-c nscollectionview macos-high-sierra

6
推荐指数
1
解决办法
1353
查看次数

增长NSTextView以适应内容是剪切最后一行文本

我正在尝试创建一个NSTextView,当用户键入并在高度达到最大值时滚动,它会垂直增长.这类似于Messages工作中的文本视图.

我的第一次尝试使用委托来监听文本更改并调整与NSTextView的滚动视图关联的高度约束:

- (void)textDidChange:(NSNotification *)notification
{
    NSTextView *textView = self.textView;
    NSRect usedRect = [textView.textContainer.layoutManager usedRectForTextContainer:textView.textContainer];
    NSLog(@"DEBUG: used rect: %@", NSStringFromRect(usedRect));
    self.textViewHeightConstraint.constant = MIN(80.f, MAX(usedRect.size.height, 30.f));
}
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作:文本视图(滚动视图)的高度在我输入时更新,但是,最后一行文本被剪裁:

在此输入图像描述

一旦滚动视图达到它的最大高度并开始滚动它就可以很好地工作.我试图在封闭的滚动视图上强制显示/布局/约束更新,没有运气.我的猜测是滚动视图的剪辑视图没有正确更新,它正在剪切文本视图的底部.当约束发生变化时,有没有办法强制剪辑视图/滚动视图适当更新?

cocoa objective-c nstextview nsscrollview

5
推荐指数
1
解决办法
2046
查看次数

如何动画NSCollectionView的scrollToIndexPaths:scrollPosition:?

我正在尝试动画NSCollectionView scrollToIndexPaths:scrollPosition:,如果将此消息发送到集合视图的animator代理,根据文档可以实现.但是,我无法让它发挥作用.

我已经设置了一个非常简单的项目,其中只包含一个集合视图,并创建了1000个100x100项目.一个简单的操作将可见索引路径增加50并尝试滚动到它.我的滚动代码如下:

- (IBAction)increment:(id)sender {
  NSIndexPath *visibleIndexPath = [[self.collectionView indexPathsForVisibleItems] anyObject];
  NSIndexPath *toIndexPath = [NSIndexPath indexPathForItem:visibleIndexPath.item + 50 inSection:visibleIndexPath.section];
  [self.collectionView.animator scrollToItemsAtIndexPaths:[NSSet setWithObject:toIndexPath] scrollPosition:NSCollectionViewScrollPositionCenteredHorizontally];
}
Run Code Online (Sandbox Code Playgroud)

这会将集合视图跳转到目标索引路径,但不会设置动画.我已经确保滚动视图也是图层支持的,基于我在此发现的一些其他线程:

在此输入图像描述

项目中唯一的其他代码是几行,用于设置集合视图和流程布局viewDidLoad::

  // Do any additional setup after loading the view.
  NSCollectionViewFlowLayout *flowLayout = [[NSCollectionViewFlowLayout alloc] init];
  flowLayout.itemSize = CGSizeMake(100.f, 100.f);
  flowLayout.scrollDirection = NSCollectionViewScrollDirectionHorizontal;
  self.collectionView.collectionViewLayout = flowLayout;

  [self.collectionView registerClass:[CollectionViewItem class] forItemWithIdentifier:@"identifier"];
Run Code Online (Sandbox Code Playgroud)

有没有人能够使用动画scrollToIndexPaths:scrollPosition:?文档使它听起来很明显,但我不能让它工作.

macos cocoa objective-c appkit nscollectionview

1
推荐指数
1
解决办法
784
查看次数