- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:
我确实忘记提到 CollectionView 在 Split View Controller 的右侧,而在左侧,我有 tableView。选择一行后,我传递一个新的 FEED ADDRESS 并让它在右侧运行 refreshFeed 方法。
我有一个从 XML 解析数据的 Collection View 。当按下某个按钮时,我希望它清除 CollectionView,并从不同的 XML 加载数据,这两者都位于在线位置。我使用 ASIHTTPRequest 和 GDATAXML 类来帮助我实现这一目标。这是我的代码。我可以通过日志验证 NSMutableArray 是否已清除,并成功填充了不同的 XML,但 reloadData 永远不会发生,因为 cellForItem 不会被第二次调用。我哪里搞砸了?
@interface RightViewController ()
@property (nonatomic, strong) IBOutlet UICollectionView *collectionView;
@end
@implementation RightViewController
@synthesize allEntries = _allEntries;
@synthesize feeds = _feeds;
@synthesize queue = _queue;
@synthesize webViewController = _webViewController;
@synthesize activity;
@synthesize webViewController2 = _webViewController2;
@synthesize nameit2;
@synthesize nowplaying;
@synthesize entryofmp3 = _entryofmp3;
@synthesize nameit;
@synthesize progress;
@synthesize lastSelection;
@synthesize backgroundTaskIdentifier, theurl;
@synthesize thetable, thepath, downloadlabel, receivedData, progressbutton;
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [_allEntries count];
}
- (void)loadFirstTime {
self.allEntries = [NSMutableArray array];
self.queue = [[NSOperationQueue alloc] init];
if (_feedAddress == nil) {
_feedAddress = @"http://www.316apps.com/AIMAPPLETV/AIMSeries.xml";
}
self.feeds = [NSArray arrayWithObjects:_feedAddress,
nil];
for (NSString *feed in _feeds) {
NSLog(@"Running Fine");
NSURL *url = [NSURL URLWithString:feed];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[_queue addOperation:request];
}
NSLog(@"Still Good");
//[self.collectionView reloadData];
}
-(void)changeFeed {
[_allEntries removeAllObjects];
_feedAddress = @"http://www.316apps.com/AIMAPPLETV/AIMCON.xml";
[self loadFirstTime];
// self.queue = nil;
//_request.delegate = nil;
// _request.delegate = nil;
// [_collectionView reloadData];
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
// [self performSegueWithIdentifier:@"playMovies" sender:self];
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
NSString *wifiStreamAddress = entry.articleUrl;
AVPlayer *player = [[AVPlayer alloc] initWithURL: [NSURL URLWithString: wifiStreamAddress] ];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
playerViewController.player = player;
// Keep pointers to player and controller
self.player = player;
self.playerViewController = playerViewController;
[self presentViewController: playerViewController animated: true completion: ^{
[self.player play];
}];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"playMovies"])
{
PlayMovies *userViewController = [segue destinationViewController];
//if you need to pass data to the next controller do it here
}
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
static NSString *cellIdentifier = @"cvCell";
CVCell *cell = (CVCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
[cell.theimage setImageWithURL:[NSURL URLWithString:entry.articleImage] placeholderImage:[UIImage imageNamed:@"icon@2x.png"]];
cell.theimage.adjustsImageWhenAncestorFocused = YES;
cell.theimage.clipsToBounds = false;
return cell;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.allEntries = [NSMutableArray array];
self.queue = [[NSOperationQueue alloc] init];
[self loadFirstTime];
}
-(void) viewWillAppear:(BOOL)animated {
}
- (void)parseRss:(GDataXMLElement *)rootElement entries:(NSMutableArray *)entries {
NSArray *channels = [rootElement elementsForName:@"channel"];
for (GDataXMLElement *channel in channels) {
NSString *blogTitle = [channel valueForChild:@"title"];
NSArray *items = [channel elementsForName:@"item"];
for (GDataXMLElement *item in items) {
NSString *articleTitle = [item valueForChild:@"title"];
NSString *articleUrl = [[[[item elementsForName: @"enclosure"] lastObject] attributeForName: @"url"] stringValue];
NSString *articleDateString = [item valueForChild:@"pubDate"];
NSString *picture = [[[[item elementsForName: @"itunes:image"] lastObject] attributeForName: @"href"] stringValue];
NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822];
RSSEntry *entry = [[RSSEntry alloc] initWithBlogTitle:blogTitle
articleTitle:articleTitle
articleUrl:articleUrl
articleDate:articleDate
articleImage:picture];
[entries addObject:entry];
NSLog(@"%@", entries);
}
}
[self.collectionView reloadData];
}
- (void)parseFeed:(GDataXMLElement *)rootElement entries:(NSMutableArray *)entries {
if ([rootElement.name compare:@"rss"] == NSOrderedSame) {
[self parseRss:rootElement entries:entries];
} else if ([rootElement.name compare:@"feed"] == NSOrderedSame) {
// [self parseAtom:rootElement entries:entries];
} else {
NSLog(@"Unsupported root element: %@", rootElement.name);
}
}
- (void)requestFinished:(ASIHTTPRequest *)request {
NSLog(@"Request Finished");
[_queue addOperationWithBlock:^{
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[request responseData]
options:0 error:&error];
if (doc == nil) {
NSLog(@"Failed to parse %@", request.url);
} else {
NSMutableArray *entries = [NSMutableArray array];
[self parseFeed:doc.rootElement entries:entries];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
for (RSSEntry *entry in entries) {
int insertIdx = [_allEntries indexForInsertingObject:entry sortedUsingBlock:^(id a, id b) {
RSSEntry *entry1 = (RSSEntry *) a;
RSSEntry *entry2 = (RSSEntry *) b;
return [entry1.articleDate compare:entry2.articleDate];
}];
[_allEntries insertObject:entry atIndex:insertIdx];
}
}];
}
}];
}
- (void)requestFailed:(ASIHTTPRequest *)request {
NSError *error = [request error];
NSLog(@"Error: %@", error);
[self loadFirstTime];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
第二次更新:
我正在慢慢到达某个地方。认为这是因为我没有设置 Segue。我从左侧 TableView 的 Cell 到 Collection View 的 View Controller 设置一个 segue 并设置为 ShowDetail,并命名它。然后在 LeftViewController 中:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == 1) {
[self performSegueWithIdentifier:@"doingIt" sender:self];
}
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"doingIt"])
{
self.rightViewController = [[RightViewController alloc] init];
[self.rightViewController refresheyc];
//if you need to pass data to the next controller do it here
}
}
在 RightViewController 中我有:
-(void)refresheyc {
NSLog(@"This Sucks");
[self.allEntries removeAllObjects];
[self.collectionView reloadData];
self.allEntries = nil;
self.queue = nil;
self.allEntries = [NSMutableArray array];
self.queue = [[NSOperationQueue alloc] init];
self.feeds = [NSArray arrayWithObjects:@"http://www.316apps.com/AIMAPPLETV/AIMCON.xml",
nil];
for (NSString *feed in _feeds) {
NSURL *url = [NSURL URLWithString:feed];
NSLog(@"URL%@", url);
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[_queue addOperation:request];
}
}
CollectionView 中的 Cells 立即消失,但几秒钟后,它们都以相同的方式返回,根本没有改变 XML,但我明白了:
2016-01-09 14:37:31.542 AIM-TV[7965:522091] This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.
Stack:(
0 CoreFoundation 0x0000000109fa6ff5 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x000000010d45cdeb objc_exception_throw + 48
2 CoreFoundation 0x0000000109fa6f2d +[NSException raise:format:] + 205
3 Foundation 0x000000010aa96341 _AssertAutolayoutOnMainThreadOnly + 79
4 Foundation 0x000000010a8f6d6e -[NSISEngine withBehaviors:performModifications:] + 31
5 UIKit 0x000000010c804eb8 -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 58
6 UIKit 0x000000010c804854 __57-[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:]_block_invoke + 646
7 UIKit 0x000000010c804ec1 -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 67
8 UIKit 0x000000010c804589 -[UIView(AdditionalLayoutSupport) _switchToLayoutEngine:] + 242
9 UIKit 0x000000010c80405d -[UIView(AdditionalLayoutSupport) _initializeHostedLayoutEngine] + 649
10 UIKit 0x000000010c7f652a -[UIView(UIConstraintBasedLayout) _initializeLayoutEngine] + 152
11 UIKit 0x000000010c7f652a -[UIView(UIConstraintBasedLayout) _initializeLayoutEngine] + 152
12 UIKit 0x000000010c804e24 -[UIView(AdditionalLayoutSupport) _layoutEngineCreateIfNecessary] + 62
13 UIKit 0x000000010c7f732b -[UIView(UIConstraintBasedLayout) _tryToAddConstraint:roundingAdjustment:mutuallyExclusiveConstraints:] + 126
14 UIKit 0x000000010c7f75ef -[UIView(UIConstraintBasedLayout) _addConstraint:] + 274
15 UIKit 0x000000010c7fd247 -[UIView(UIConstraintBasedLayout) _updateContentSizeConstraints] + 779
16 UIKit 0x000000010c806270 -[UIView(AdditionalLayoutSupport) updateConstraints] + 224
17 UIKit 0x000000010c80559b -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 550
18 UIKit 0x000000010c805866 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 198
19 UIKit 0x000000010c8054aa -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 309
20 UIKit 0x000000010c805866 -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 198
21 UIKit 0x000000010c8054aa -[UIView(AdditionalLayoutSupport) _internalUpdateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 309
22 UIKit 0x000000010c804ec1 -[UIView(AdditionalLayoutSupport) _withAutomaticEngineOptimizationDisabledIfEngineExists:] + 67
23 UIKit 0x000000010c80583a -[UIView(AdditionalLayoutSupport) _updateConstraintsIfNeededAccumulatingViewsNeedingSecondPassAndViewsNeedingBaselineUpdate:forSecondPass:] + 154
24 UIKit 0x000000010c805e9e __60-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]_block_invoke + 98
25 UIKit
最佳答案
问题真的很奇怪,但它对我有用,我在动画 block 中添加了更新约束代码,
UIView.animate(withDuration: 0.5, animations: {() -> Void in
//update constraints here
self.view.layoutIfNeeded()
self.collectionView.layoutIfNeeded()
})
self.collectionView.reloadData()
关于ios - UICollectionView 重新加载数据无法更新 CollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34697584/
这个问题在这里已经有了答案: How does Scala's apply() method magic work? (3 个回答) 9年前关闭。 假设我在 scala 中有一个 MyList 类,其
这个问题在这里已经有了答案: What is a non-capturing group in regular expressions? (18 个回答) Reference - What does
这个问题是针对嵌入式系统的! 我有以下选项来初始化一个对象: Object* o = new Object(arg); 这会将对象放入堆中并返回指向它的指针。我不喜欢在嵌入式软件中使用动态分配。 Ob
我自己搜索过,没能成功的正则表达式。 我有一个 html 文件,其中包含 [] 之间的变量我想把每一个字都写进去。 [client_name][client_company] [cl
我是 Python 新手。我不明白为什么这段代码不起作用: reOptions = re.search( "[\s+@twitter\s+(?P\w+):(?P.*?)\s+]", d
在过去 7 个月左右的时间里,我几乎一直在使用 .NET C# 进行编程。在那之前,我的大部分编程都是用 C++(从学校里学的)。在工作中,我可能需要在接下来的几个月里做一大堆 C 语言。我对 C 的
我是 RE 的新手,我正在尝试获取歌词并分离出歌词标题、和声和主唱: 下面是一些歌词的例子: [Intro] D.A. got that dope! [Chorus: Travis Scott] Ic
这可能是不可能的,但我想检查是否可以用一种简单的方式表达这样的事情: // obviously doesn't work class Foo : IFoo where T: Bar {
我们的应用程序中有“user”和“study”实体,存储在它们各自的表中。一项研究代表一种研究和已收集的数据。它们是多对多的关系,所以我们需要一个链接表:studies_users。 我们为用户分配角
将测试条件添加到 Visual Studio 2010 数据库单元测试(对于 SQL Server 2008)时,这些条件称为例如rowCountCondition1、rowCountConditio
在模拟器上,我可以从设置中卸载 SD 卡。 然后我可以将它安装到我的操作系统上,然后正常卸载它。 我一直无法弄清楚如何在模拟器上重新安装它(无需重新启动)。 提示: adb 命令 remount 是无
假设在一个分支上执行了一系列提交,但该分支尚未与主干重新同步。是否可以从提交中生成全局补丁?是否可以从一系列提交中生成“分组”补丁?如果是,如何? 最佳答案 svn diff -rXXX:YYY UR
在某些情况下,我想在我的应用程序中锁定调整大小功能,为此我尝试对属性进行数据绑定(bind),并且不允许在某些情况下更改它,但没有成功。 有没有办法这样做? 这是我不成功的尝试: XAML: Vie
当我的计算机连接多个显示器时,我可以检测它们,并根据从获取的值设置位置来向它们绘制图形 get(0, 'MonitorPositions') 但是,当我在 MATLAB 运行时断开监视器时,此属性不会
我们有一个grails应用程序,该应用程序在grails数据库中存储了各种域对象。该应用程序连接到第二个数据库,运行一些原始sql,并在表中显示结果。它基本上是一个报告服务器。 我们通过在DataSo
无法比较来自不同容器的迭代器(参见这里的示例: https://stackoverflow.com/a/4664519/225186 )(或者从技术上讲,它不需要有意义。) 这就提出了另一个问题,来自
我有以下情况: 家长 Activity : ParentActivityClass { private Intent intent; @Override public void onCreate(Bu
我经常将元素与附加功能 Hook ,例如: $('.myfav').autocomplete(); $('.myfav').datepicker(); $('.myfav').click(somefu
因此,我将 tooltipster.js 库用于工具提示,并尝试更改工具提示在不同屏幕尺寸上的默认距离。 所以这是默认的 init 的样子: $(inputTooltipTrigger).tool
我在 ARM7 嵌入式环境中工作。我使用的编译器不支持完整的 C++ 功能。它不支持的一项功能是动态类型转换。 有没有办法实现dynamic_cast<>() ? 我使用 Google 寻找代码,但到
我是一名优秀的程序员,十分优秀!