Re: New information. Was: Re: Weird UITableView problem
Re: New information. Was: Re: Weird UITableView problem
- Subject: Re: New information. Was: Re: Weird UITableView problem
- From: Aaron Montgomery <email@hidden>
- Date: Tue, 28 Apr 2015 10:11:03 -0700
Works for me. Not saying it doesn't work for you, but the problem isn't the code.
Created a fresh Single View Application iOS project.
Replaced ViewController.m source with the code below.
Added a UITableView to the View Controller's View and hooked up the DataSource to the View Controller.
Ran it in the Simulator.
Scrolled the table and could see all the dwarves.
Aaron
> On Apr 28, 2015, at 9:45 AM, William Squires <email@hidden> wrote:
>
> 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
_______________________________________________
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