我cell.contentView.bounds.size.width用来计算UITableView单元格中文本字段的位置.创建单元格时,调试代码将宽度报告为302.当单元格滚动屏幕然后重新打开时,调试代码每次都会报告它为280.它似乎不想回到302并且仍然停留在280.最终结果是文本字段在第二次将字段放入单元格的contentView时被置于错误的位置,尽管它被放入第一次正确的地方.
我认为22在某种程度上是重要的,但我不知道它是什么.猜测它可能是披露箭头,我在宽度确定前移动了"清除单元格"代码,包括将附件设置为虚无...
谁能告诉我这里发生了什么?
代码(无关紧要 - 我知道 - 东西被剪掉了)看起来像这样:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
NSUInteger section = [indexPath section];
NSUInteger row = [indexPath row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell.
while( [cell.contentView.subviews count] ){
id subview = [cell.contentView.subviews objectAtIndex:0];
[subview removeFromSuperview];
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
8< snip!
CGFloat …Run Code Online (Sandbox Code Playgroud) 大约在最后一小时,我一直在为这个问题感到困惑,而且我的头发已经不多了.
我正在玩AdventOfCode.com第4天(10/10,将再次播放),并希望这个小功能工作.(我的代码是不是有多么绝色请不要发表评论,这本来是快速和肮脏的,但它现在只是脏了.哎呀,我甚至不知道如果代码代表工作的机会.Anywho ...)
func countDigestLeadingZeros( theDigest:[UInt8] ) -> Int {
var theCount: Int = 0
print(theDigest[0])
while ((theCount < 16) && (countLeadingZeroNybbles( theDigest[theCount] as Int)>0)) {
theCount++
}
return theCount
}
Run Code Online (Sandbox Code Playgroud)
错误发生在theDigest[theCount]和"是不能下标类型的值'[UInt8]'".虽然不熟悉Swift,但我很确定它告诉我的是我不能在UInt8s数组上使用索引(任何类型).但请注意,该print(theDigest[0])行不会导致错误.
我已经用Google搜索了这个,但要么我错过了明显的解决方案,要么无法解释我发现的结果,其中大部分看起来与这个看似简单的问题无关.
好的,知识渊博的程序员类型,请温柔......
我无法获得一个非常简单的单视图"Hello World"应用程序来自动旋转.我经历了通常的"Hello World"步骤:
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return YES;
}
*/
Run Code Online (Sandbox Code Playgroud)
(嗯...... Duh.我刚看到它.但是我会继续讲述我的故事.)
谷歌搜索答案后大约一个小时后就陷入了挫败感.我看到的每个地方,每个来源都说同样的事情:只需将返回值更改为"是".但是...
我甚至坚持调试器断点!他们都没被击中!(震惊,惊讶!)由于我不知道如何使用调试器,我在"initWithNibName"中插入了一个断点.你猜怎么着?!这也没有受到打击!有没有搞错?!
所以我下载了Apple的WhichWayIsUp应用来测试我的断点l33t断点skilz.果然,当我旋转"iPhone"时,它会发出哔哔声.那么我做错了什么?!
当然,我并不是那么无知,我......不,等等,我把它拿回来.如果你看到我的错误,那么你肯定在想,"是的,他就是那么无知." 而你是对的.
对于那些偶然发现这个问题的人,同样感到沮丧,并没有看到问题,这里的答案是:整个shouldAutorotateToInterfaceOrientation方法由"/**/"注释标记封装.它永远不会被编译,更不用说了.
现在,我知道,我找到的所有来源都没有明显表明您必须确保取消注释代码块.有几个人说,"你所要做的只是改变一行代码." 而且,除了那些带有评论标记的其他两个,它们是完全正确的.
如果我刚刚帮助了其他一些n00b,那就太好了.如果我让你嘲笑我的失败,那就更好了.
谢谢,大家,谢谢你的帮助!
以下是Foundation应用程序中的两段Objective-C代码.这段代码在一个函数中:
[arrayOfObjects addObject:[[TheShape alloc] init]];
NSLog(@"%@", arrayOfObjects); // log verifies "<TheShape..." is in the array
[arrayOfObjects release];
Run Code Online (Sandbox Code Playgroud)
在我的TheShape类中,我有这个dealloc覆盖方法:
- (void)dealloc {
NSLog(@"TheShape dealloc called.");
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
虽然我的程序不起作用,但它并不像我期望的那样工作.当[arrayOfObjects release]发送消息时,我希望看到的"TheShape的dealloc ..."字符串出现在日志中.它没有.
Q1:为什么不呢?
所以我挖了一些并简化了一些事情.如果我做一些更简单的事情:
TheShape *aShape = [[TheShape alloc] init];
[aShape release];
Run Code Online (Sandbox Code Playgroud)
调试消息仍未出现在日志中.
Q2:为什么不呢?
但如果我这样做:
TheShape *aShape = [TheShape new];
[aShape release];
Run Code Online (Sandbox Code Playgroud)
调试消息确实出现在日志中.如果我将第一个样本中的alloc/init更改为,则调试消息也会出现在日志中new.
Q3:为什么?
很显然,我失去了一些东西在分配/初始化/释放周期概念(Q的1和2),并在假想的等效new和alloc/init(Q3).任何人都可以指点我的教程,对于像我这样难以思考的事情来解释一下吗?
谢谢,
法案
alloc ×1
arrays ×1
autorotate ×1
init ×1
ios ×1
iphone ×1
new-operator ×1
objective-c ×1
release ×1
swift ×1
uitableview ×1