小编Bil*_*les的帖子

UITableView cell.contentView.bounds.size.width使用单元重用进行更改

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)

uitableview ios

14
推荐指数
1
解决办法
2万
查看次数

Swift错误"无法下标类型[Uint8]的值"

大约在最后一小时,我一直在为这个问题感到困惑,而且我的头发已经不多了.

我正在玩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搜索了这个,但要么我错过了明显的解决方案,要么无法解释我发现的结果,其中大部分看起来与这个看似简单的问题无关.

arrays swift

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

"Hello World"iPhone应用程序不会自动旋转

好的,知识渊博的程序员类型,请温柔......

我无法获得一个非常简单的单视图"Hello World"应用程序来自动旋转.我经历了通常的"Hello World"步骤:

  • 创建一个新的基于视图的项目.
  • 双击ViewController的.xib文件.
  • 从库中添加项目.我尝试过Label和Slider.
  • 将Struts和Springs更改为Springs,以使项目保持在视图的中间.
  • 保存并编辑ViewController的.m文件,使其显示为:
  • /*
    // 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.我刚看到它.但是我会继续讲述我的故事.)

  • 保存,构建,运行,旋转,并注意到当我旋转iPhone模拟器时没有任何旋转.而且,不,我没有旋转我的笔记本电脑......我使用了键盘快捷键!

    谷歌搜索答案后大约一个小时后就陷入了挫败感.我看到的每个地方,每个来源都说同样的事情:只需将返回值更改为"是".但是...

    我甚至坚持调试器断点!他们都没被击中!(震惊,惊讶!)由于我不知道如何使用调试器,我在"initWithNibName"中插入了一个断点.你猜怎么着?!这也没有受到打击!有没有搞错?!

    所以我下载了Apple的WhichWayIsUp应用来测试我的断点l33t断点skilz.果然,当我旋转"iPhone"时,它会发出哔哔声.那么我做错了什么?!

    当然,我并不是那么无知,我......不,等等,我把它拿回来.如果你看到我的错误,那么你肯定在想,"是的,他就是那么无知." 而你是对的.

    对于那些偶然发现这个问题的人,同样感到沮丧,并没有看到问题,这里的答案是:整个shouldAutorotateToInterfaceOrientation方法由"/**/"注释标记封装.它永远不会被编译,更不用说了.

    现在,我知道,我找到的所有来源都没有明显表明您必须确保取消注释代码块.有几个人说,"你所要做的只是改变一行代码." 而且,除了那些带有评论标记的其他两个,它们是完全正确的.

    如果我刚刚帮助了其他一些n00b,那就太好了.如果我让你嘲笑我的失败,那就更好了.

    谢谢,大家,谢谢你的帮助!

  • iphone autorotate

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

    拥有数组dealloc'd时没有调用-dealloc方法......应该吗?

    以下是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),并在假想的等效newalloc/init(Q3).任何人都可以指点我的教程,对于像我这样难以思考的事情来解释一下吗?

    谢谢,

    法案

    release objective-c init new-operator alloc

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