发生了什么
目前我有一个使用两个UICollectionViews
内部的应用程序UITableView
.这样我创建了一个类似应用程序的Pulse News.我的问题是,有时第6行和第11行完全消失,留下一个空白区域应该是单元格.我真的不介意,如果所有细胞都是这样的(这种方式我可以假设我没有做正确的事情),但问题是,正好发生在那些特定的细胞上.
我的理论
第6行和第11行是我开始滚动时出现的行,所以默认情况下我可以看到5个单元格,当我进行第一次水平滚动时,第6行会出现(有时会出现空白).
是)我有的
我目前唯一要做的就是:
[self.collectionView registerNib:[UINib nibWithNibName:CELL_NIB_NAME bundle:nil] forCellWithReuseIdentifier:CELL_IDENTIFIER];
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad
.在创建细胞时:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CELL_IDENTIFIER forIndexPath:indexPath];
NSMutableDictionary *dictionary = [self.DataSource objectAtIndex:[indexPath row]];
[cell buildViewWithDictionary:dictionary withReferenceParent:self.referenceViewController];
return cell;
}
Run Code Online (Sandbox Code Playgroud)
所以在我的承诺中没有任何幻想在这里发生.我虽然在数据源(虚拟JSON文件)上有问题,但有时它工作正常并且单元格显示,所以我猜从那部分是可以的.
所以我的"问题":有谁知道发生了什么?我真的不想说这是来自iOS的错误,但我想不出别的什么.
编辑1.0
令人惊讶的是这种方法
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
Run Code Online (Sandbox Code Playgroud)
在indexPath
不计算[0,5]的情况下从[0,4]变为[0,6].我第一次真正在iOS中看到这种情况.
编辑2.0
我已经改变了创建单元格的方式,而不是出列我使用旧方法:
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CELL_NIB_NAME owner:self options:nil];
MyCell *cell = (MyCell *)[nib objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)
仍然是同样悲伤的结果.
我在故事板上有一个视图,它有一个按钮来执行某个动作.但是,要执行此操作,用户必须登录.按钮处理程序将测试用户是否已登录并在是(YES)时执行一个segue,如果为NO则执行另一个segue.NO segues推送到登录视图控制器.还有另一个segue连接回第一个视图控制器,因此如果登录成功,用户可以从中断的地方继续.视图控制器嵌入在导航控制器中.
问题是,'return'segue正在加载视图控制器的一个全新实例,而不是引用原始实例,因此我最终得到了空接口元素和内存中该视图控制器的2个副本.
如何返回视图控制器的原始实例?
给定一个字符串长度(具有相应的正确字体大小),我有一个方法可以为UITextView提供完美的大小:
- (NSInteger) heightOfLabel:(NSString*) string {
CGSize maximumLabelSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width - 40, FLT_MAX);
CGSize expectedLabelSize = [[NSString stringTrimmedForLeadingAndTrailingWhiteSpacesFromString:string]
sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:maximumLabelSize
lineBreakMode:NSLineBreakByWordWrapping];
return expectedLabelSize.height + 5;
}
Run Code Online (Sandbox Code Playgroud)
事实上,即使在iOS7中,它仍然让我完美契合.虽然现在它提出了一个警告方法,说我不应该使用'sizeWithFont:contrainedToSize:lineBreakMode'.
它现在说我应该使用-boundingRectWithSize:options:attributes:context:
这个方法对iOS7来说并不陌生,因此我认为可以在堆栈溢出时询问它,而不是去官方的苹果开发者论坛.
我有三个问题:
1)因为它被弃用了,这是否意味着我应该更换它,尽管它仍然有效?
2)我已经尝试了许多不同的boundingRectWithSize:方法,但是它们从来都不是完美的,它似乎总是略有不足(正如许多stackoverflow问题所指出的那样) - 是否有一个完美的替代方法,这种方法完全取而代之与我以前的方法一样,麻烦最小?
3)为什么要删除这种方法?是因为与其他方法的重叠吗?
问题:如何为 MacOS 上的所有窗口/应用程序实现焦点跟随鼠标?
上下文:诸如“defaults write com.apple.terminal FocusFollowsMouse -string true”之类的终端命令仅针对终端窗口实现所需的行为。
类似帖子:在 MacOS 上实现“鼠标跟随焦点”
有没有办法在Parse中进行查询以获取最近添加的PFObject类型?
我知道我可以使用大于标准的查询,但如果有一个函数可以在没有日期时添加最新的对象,那将非常有用.
当用户登录我的应用程序时,我从我的JSON服务器下载令牌并将其存储在NSUserDefaults中,如下所示:
[[NSUserDefaults standardUserDefaults] setValue:token forKey:TOKEN];
Run Code Online (Sandbox Code Playgroud)
当用户在后续页面中注销时,我调用此方法并返回登录屏幕:
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:TOKEN];
Run Code Online (Sandbox Code Playgroud)
(之前我叫[[NSUserDefaults standardUserDefaults] removeObjectForKey:TOKEN];)
无论我如何尝试删除此用户默认值,每当我加载我的应用程序时,它总是显示完整的令牌而不是空字符串也不是空值.
在阅读时,显然它与读写周期有关?但即使我离开它一段时间,关键仍然存在.这是模拟器问题吗?
无论原因是什么,我该如何解决这个问题?
你能解释一下组织单元测试的正确方法吗?例如,如果想模拟我的struct依赖项,我需要创建一个"实现"某个接口的模拟依赖项.
我应该在哪里创建这个模拟?它应该在同一个测试文件中创建吗?但是如果我在另一个测试中需要它呢?Go不允许在同一个包的2个不同文件中定义具有相同名称的结构(例如UserServiceMock).那么定义这个模拟结构的最佳位置是什么?
另一个问题.我应该自己实现这种模拟还是有一些库/工具可以让我这样做?
我一直在阅读github.com/lib/pq中的一些Golang代码,它提供了与postgres数据库交互的驱动程序.
在代码中,我碰到这个:
go func() {
select {
case <-done:
_ = cn.cancel()
finished <- struct{}{}
case <-finished:
}
}()
Run Code Online (Sandbox Code Playgroud)
取消功能如下:
func (cn *conn) cancel() error
Run Code Online (Sandbox Code Playgroud)
据我所知,下划线不被用作关于类型的静态断言(因此编译器不会评估任何副作用,就我所见(如本例所示))并且它不是'作为作者可能想要丢弃它的第二个参数.
总结:为什么要将取消函数的结果(错误)分配给下划线?
我有一个for循环,我想每次增加0.1的变量,但是值的变化与增量不同,我不确定为什么.
我已经简化了for循环,它仍然提供了一个奇怪的输出:
for (my $t = 1000; $t < 1500 ;$t+=0.1) {
print "$t\n";
}
Run Code Online (Sandbox Code Playgroud)
它打印:
1034.9
1035
1035.1
1035.2
1035.3
1035.4
1035.49999999999
1035.59999999999
1035.69999999999
1035.79999999999
1035.89999999999
1035.99999999999
1036.09999999999
1036.19999999999
1036.29999999999
[it then goes on like this to 1500]
Run Code Online (Sandbox Code Playgroud)
我不知道小数位的来源.这是我对Perl的理解的问题吗?
提前致谢.
采用浮点数,我想向下舍入,具体取决于用户定义的"bin"大小.因此,容器大小将根据用户偏好而改变.例如,箱尺寸可以是0.5,0.1,1或甚至0.01.
我的目标是确定浮点数落入哪个bin.举个例子:
0.1箱尺寸:
2348.285 will fall into a 2348.2 bin
238.592 will fall into a 238.5 bin
Run Code Online (Sandbox Code Playgroud)
0.5箱尺寸:
2348.285 will fall into a 2348.0 bin
238.592 will fall into a 238.5 bin
Run Code Online (Sandbox Code Playgroud)
0.01箱尺寸:
2348.285 will fall into a 2348.28 bin
238.592 will fall into a 238.59 bin
Run Code Online (Sandbox Code Playgroud)
一箱尺寸:
2348.285 will fall into a 2348 bin
238.592 will fall into a 238 bin
Run Code Online (Sandbox Code Playgroud)
我已经调查在Perl四舍五入例如,地板(),sprintf的(),也SUBSTR()方法,但是,没有人做了很多想我想要做的,或者说,我不能让他们做什么,我想.如果给定用户定义的bin大小,那么整齐的代码会动态地改变浮点数向下舍入的最低值?
ios ×3
go ×2
objective-c ×2
perl ×2
deprecated ×1
for-loop ×1
login ×1
macos ×1
mocking ×1
nsstring ×1
persistence ×1
pq ×1
segue ×1
storyboard ×1
testing ×1
unit-testing ×1
xcode ×1