New information. Was: Re: Weird UITableView problem
New information. Was: Re: Weird UITableView problem
- Subject: New information. Was: Re: Weird UITableView problem
- From: William Squires <email@hidden>
- Date: Tue, 28 Apr 2015 11:45:04 -0500
Thinking this was a Swift problem, I recreated the project, but with ObjC as the language. I set up the UI the same as with the Swift project. It too, only shows a subset of the array, only this one shows 15 rows, not 13. Here's the ViewController.m
//
// ViewController.m
// SimpleObjCTable
//
// Created by William Squires on 4/28/15.
// Copyright (c) 2015 William Squires. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@property NSArray *dwarves;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.dwarves = [NSArray arrayWithObjects:@"Sleepy",
@"Sneezy",
@"Bashful",
@"Happy",
@"Doc",
@"Grumpy",
@"Dopey",
@"Thorin",
@"Dorin",
@"Nori",
@"Ori",
@"Balin",
@"Dwalin",
@"Fili",
@"Kili",
@"Oin", // These are not shown.
@"Gloin",
@"Bifur",
@"Bofur",
@"Bombur",
nil];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark "UITableView Methods"
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger theCount = [self.dwarves count];
NSLog(@"theCount = %ld", theCount);
return theCount;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"indexPath.row = %ld", indexPath.row);
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SimpleTableIdentifier"];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SimpleTableIdentifier"];
}
cell.textLabel.text = [self.dwarves objectAtIndex:indexPath.row];
return cell;
}
@end
running it gives me (in the debug console) 4 instances of "theCount = 20", followed by 15 lines of "indexPath.row = 0" up to "indexPath.row = 14" (15 total, which corresponds to the comment in the initialization line for dwarves = NSArray... line above.) In both cases (the Swift project, and the ObjC project) I use the default view (with the size class w:any, h:any) and pin the UITableView to the edges of the parent view.
Now I'm totally lost as to why only a limited subset of the rows are being shown, especially given that tableView:numberOfRowsInSection: consistently returns 20 (the number of items initializing the array). HELP!!
On Apr 26, 2015, at 11:29 AM, William Squires <email@hidden> wrote:
> I made a fairly simple iOS app (Single View template, iPhone, Swift) that has a UITableView. I've got it all hooked up, and running the project (in the simulator) shows the table view, but only 13 (out of 20) rows are ever shown.
>
> here's the deal:
>
> ViewController.swift
> --------------------
> class ViewController: UIViewController, UITableViewDelegate, UITableViewSource
> {
> private let dwarves = ["Sleepy",
> "Sneezy",
> "Bashful",
> "Happy,"
> "Doc",
> "Grumpy",
> "Dopey",
> "Thorin",
> "Dorin",
> "Nori",
> "Ori",
> "Balin",
> "Dwalin",
> "Fili", // From here on, these might as well not exist (index >= 13)
> "Kili",
> "Oin",
> "Gloin",
> "Bifur",
> "Bofur",
> "Bombur"
> ]
> let simpleTableIdentifier = "SimpleTableIdentifier"
>
> ...
>
> // MARK: UITableViewDataSource/UITableViewDelegate methods
> func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
> {
> return dwarves.count
> }
>
> func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
> {
> var cell = tableView.dequeueReusableCellWithIdentifier(simpleTableIdentifier) as? UITableViewCell
> if (cell == nil)
> {
> cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: simpleTableIdentifier)
> {
> cell!.textLabel?.text = dwarves[indexPath.row]
> return cell
> }
> }
>
> When run, only the first 13 names are shown in the table view; everything from "Fili" on does not show up. I would expect either:
>
> 1) a syntax error in the array declaration (which should be caught by Xcode)
> 2) show all the items in the array, or
> 3) show none of them.
>
> Is there a (hidden) limit in the simulator that only 13 rows can be shown in a UITableView? If not, can anyone else replicate this problem?
>
> Finally, how do I call NSLog() from Swift, and have it print an object? In ObjC, it would be:
>
> NSLog(@"My object: %@\n\n",myObject);
>
> where myObject resides in MyObject.m and declared in MyObject.h and implements -(NSString *)description – in Swift, I would just have a .swift file, but how would I print it (myObject variable) to the (debug) console at runtime? What about a Swift "String" type?
>
>
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden