Change NIB Size - iphone

Can some one show me how to change the nib frame width to match the UITableViewCell. Right now it's set for 320 when i edit the nib directly, but when i open it in Ipad, it's still 320 width.
- (void)didSelectObject:(id)object atIndexPath:(NSIndexPath*)path {
PMID = nil;
NSString *str = [[NSString stringWithFormat:#"%#",[object URL]] stringByReplacingOccurrencesOfString:#"tt://actions/"
withString:#""];
NSArray *firstSplit = [str componentsSeparatedByString:#"/"];
NSString *number1 = [firstSplit objectAtIndex:0];
NSString *number2 = [firstSplit objectAtIndex:1];
TTTableViewCell* cell = (TTTableViewCell*) [self.tableView
cellForRowAtIndexPath:path];
NSArray *nib = nil;
if ([[[NSUserDefaults standardUserDefaults] objectForKey:#"Admin"] isEqualToString:#"Admin"]){
nib = [[NSBundle mainBundle] loadNibNamed:#"MenuView"
owner:self options:nil];
}else if ([[NSString stringWithFormat:#"%d",[number1 intValue]] isEqualToString:[NSString stringWithFormat:#"%#", [[NSUserDefaults standardUserDefaults] objectForKey:#"IDKey"]]]){
nib = [[NSBundle mainBundle] loadNibNamed:#"MenuView2"
owner:self options:nil];
}else{
nib = [[NSBundle mainBundle] loadNibNamed:#"MenuView3"
owner:self options:nil];
}
UIView *menuView = nil;
for (id object in nib) {
if ([object isKindOfClass:[UIView class]]) {
menuView = (UIView *) object;
}
}
[self showMenu:menuView forCell:cell animated:YES];
}

Related

How to PrepareforSegue for multiple objects : UIImageView and audiofile

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:#"showDetail"])
{
NSIndexPath *selectedIndexPath = [[self.collectionView indexPathsForSelectedItems] objectAtIndex:0];
// load the image, to prevent it from being cached we use 'initWithContentsOfFile'
NSString *imageNameToLoad = [NSString stringWithFormat:#"%d_full", selectedIndexPath.row];
NSString *pathToImage = [[NSBundle mainBundle] pathForResource:imageNameToLoad ofType:#"jpg"];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:pathToImage];
DetailViewController *detailViewController = [segue destinationViewController];
detailViewController.image = image;
}
}
How can i add audio file in prepareforSegue along with UIImageview for destinationViewController
audioArray =[[NSArray alloc] initWithObjects:#"Theme1", #"Theme2", #"Theme3", #"Theme4", nil];
NSString *filePath = [audioArray objectAtIndex:0];
NSString *audioFilePath = [[NSBundle mainBundle] pathForResource:filePath ofType: #"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: audioFilePath];
audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:fileURL error:nil];
Thanks

strange Memory leaks

My iPad Application facing few memory leaks. here is screen shot and code.I am rloading table data after each second to show progress.so how can i get this fix.
this always happen when i reload table
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* Identifier = #"OrderCustomCell";
UserCustomCell* cells =(UserCustomCell*) [tableView dequeueReusableCellWithIdentifier:Identifier];
if (cells == nil)
{
NSArray* topLevelObjects=[[NSBundle mainBundle] loadNibNamed:#"UserCustomCell" owner:self options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[UITableViewCell class]])
{
cells=(UserCustomCell *)currentObject;
break;
}
}
}
NSDictionary* dic = [tableDataArray objectAtIndex:indexPath.row];
cells.selectionStyle = UITableViewCellEditingStyleNone;
cells.brandName.text = [dic objectForKey:#"brandname"];
[cells.msyncBtn setTag:indexPath.row];
NSString* status = [dic objectForKey:#"status"];
if ([status isEqualToString:#""])
{
cells.status.text = [NSString stringWithFormat:#"0%# Completo",#"%"];
}
else
{
cells.status.text = [NSString stringWithFormat:#"%#%# Completo",status,#"%"];
}
NSString* syncDate = [dic objectForKey:#"syncDate"];
if ([syncDate isEqualToString:#""])
{
cells.syncDate.text = [NSString stringWithFormat:#"Não sincronizado"];
}
else
{
cells.syncDate.text = [NSString stringWithFormat:#"%#",syncDate];
}
NSString* totalloaded = [dic objectForKey:#"totalloaded"];
if ([totalloaded isEqualToString:#""])
{
cells.totalLoaded.text = [NSString stringWithFormat:#""];
}
else
{
cells.totalLoaded.text = [NSString stringWithFormat:#"%#",totalloaded];
}
return cells;
}
Please check this image
Try this
if (cells == nil)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
NSArray* topLevelObjects=[[NSBundle mainBundle] loadNibNamed:#"UserCustomCell" owner:self options:nil];
for(id currentObject in topLevelObjects)
{
if([currentObject isKindOfClass:[UITableViewCell class]])
{
cells=(UserCustomCell *)currentObject;
break;
}
}
[pool drain];
}

MWPhotoBrowser add data from plist?

trying to get some data from a plist into the MWPhotoBrowser sample app.
Any ideas how to do it?
UIViewController *converterController = nil;
NSMutableArray *photos = [[NSMutableArray alloc] init];
converterController = [[MWPhotoBrowser alloc] initWithPhotos:photos];
converterController.hidesBottomBarWhenPushed = YES;
//here individual images can be added. However need to add images from a plist.
[photos addObject:[MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:#"image1" ofType:#"jpg"]]];
[photos addObject:[MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:#"image2" ofType:#"jpg"]]];
[photos addObject:[MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:#"image3" ofType:#"jpg"]]];
[photos addObject:[MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:#"image4" ofType:#"jpg"]]];
if (converterController) {
[self.navigationController pushViewController:converterController animated:YES];
[converterController release];
}
[photos release];
Can add objects individually as shown above, but not able to do it with a plist.
Can anyone share an idea?
thanks
w
ell i got this but it doesnt work.
SString *path = [[NSBundle mainBundle] pathForResource:
#"ImageData" ofType:#"plist"];
// Build the array from the plist
photos = [[NSMutableArray alloc] initWithContentsOfFile:path];
crashes the app.
I must use the MWPhoto property.
Help anyone?
Maybe Michael Waterfall wants to look into this?
EDIT:
OK here is the working code (well it works ok so far)
NSUInteger nimages = 0;
for (; ; nimages++) {
NSString *nameOfImage_ = #"imageSufix";
NSString *imageName = [NSString stringWithFormat:#"%#%d.jpg", nameOfImage_, (nimages + 1)];
//NSLog(#"Name is %#", imageName); log the names
image = [UIImage imageNamed:imageName];
if (image == nil) {
break;
}
[photos addObject:[MWPhoto photoWithImage:image]];

UISlider controlling UIImageView

I'm trying to make a UISlider control the picture shown in a UIImageView. Slider min is 0, max is 50.
The problem is the UIImageView only react to the else and chosenTime = 50.
Only then corresponding picture are shown in the UIImageView.
48 and 49 are ignored, the "else" picture is shown in these cases.
Any help is much appreciated!
Here's the code:
-(IBAction) sliderChanged:(id)sender{
UISlider *slider = (UISlider *) sender;
int prog = (int)(slider.value + 0.5f);
NSString * newText = [[NSString alloc] initWithFormat:#"%d", prog];
sliderLabel.text = newText;
int chosenTime = [newText intValue];
NSLog(#"chosenTime is %i", chosenTime);
//chosenTime is confirmed int value in the NSLOG!!!
if (chosenTime == 1) {
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:#"/Pic0001.png"];
clockView.image = [UIImage imageWithContentsOfFile:fullpath];
}
if (chosenTime == 48) {
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:#"/Pic0048.png"];
clockView.image = [UIImage imageWithContentsOfFile:fullpath];
}
if (chosenTime == 49) {
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:#"/Pic0049.png"];
clockView.image = [UIImage imageWithContentsOfFile:fullpath];
}
if (chosenTime == 50) {
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:#"/Pic0050.png"];
clockView.image = [UIImage imageWithContentsOfFile:fullpath];
} else {
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingString:#"/Pic0000.png"];
clockView.image = [UIImage imageWithContentsOfFile:fullpath];
}
}
I simplified the code a little bit. Make sure the NSLogged numbers are in the range 1-50. If not, the slider's minimum/maximum values are misconfigured.
-(IBAction) sliderChanged: (UISlider *) sender
{
int chosenTime = (int) ceilf(slider.value);
NSLog(#"chosenTime is %i", chosenTime);
//chosenTime is confirmed int value in the NSLOG!!!
if (chosenTime > 50)
chosenTime = 0;
NSString *fileName = [NSString stringWithFormat: #"Pic00%02d.png", chosenTime];
NSString *fullpath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: fileName];
clockView.image = [UIImage imageWithContentsOfFile: fullpath];
}
The problem with your code is the absence of else after each if. The comparisons fall through to the last if, after which it's either 50 or not 50, and not being 50 is treated as zero.

App is crashing, unexplained

I'm getting these errors in the console:
2010-01-07 18:15:19.036 FlagLearner[13310:207] *** -[NSCFString objectForKey:]: unrecognized selector sent to instance 0x3814530
2010-01-07 18:15:19.039 FlagLearner[13310:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString objectForKey:]: unrecognized selector sent to instance 0x3814530'
2010-01-07 18:15:19.047 FlagLearner[13310:207] Stack: (
I have no warnings, no build errors, and no analyzer results whatsoever. Yet, it crashes! Can anyone figure out why?
Feel free to email me at █████████████#gmail.com if you want me to send you the source to take a look at.
Here's the implementation file:
//
// RootViewController.m
// Pop,Cap,Flag!
//
// Created by Samstrix Apps on 6/01/10.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import "RootViewController.h"
#import "Pop_Cap_Flag_AppDelegate.h"
#import "DetailViewController.h"
#implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(#"here1");
//init array
listOfItems = [[NSMutableArray alloc] init];
//add items
NSLog(#"here2");
NSString *filePathA = [[NSBundle mainBundle] pathForResource:#"A" ofType:#"txt"];
NSString *myTextA= [NSString stringWithContentsOfFile:filePathA encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresA = [myTextA componentsSeparatedByString:#"-"];
NSLog(#"here3");
NSString *filePathB = [[NSBundle mainBundle] pathForResource:#"B" ofType:#"txt"];
NSString *myTextB= [NSString stringWithContentsOfFile:filePathB encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresB = [myTextB componentsSeparatedByString:#"-"];
NSString *filePathC = [[NSBundle mainBundle] pathForResource:#"C" ofType:#"txt"];
NSString *myTextC= [NSString stringWithContentsOfFile:filePathC encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresC = [myTextC componentsSeparatedByString:#"-"];
NSString *filePathD = [[NSBundle mainBundle] pathForResource:#"D" ofType:#"txt"];
NSString *myTextD= [NSString stringWithContentsOfFile:filePathD encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresD = [myTextD componentsSeparatedByString:#"-"];
NSString *filePathE = [[NSBundle mainBundle] pathForResource:#"E" ofType:#"txt"];
NSString *myTextE= [NSString stringWithContentsOfFile:filePathE encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresE = [myTextE componentsSeparatedByString:#"-"];
NSString *filePathF = [[NSBundle mainBundle] pathForResource:#"F" ofType:#"txt"];
NSString *myTextF= [NSString stringWithContentsOfFile:filePathF encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresF = [myTextF componentsSeparatedByString:#"-"];
NSString *filePathG = [[NSBundle mainBundle] pathForResource:#"G" ofType:#"txt"];
NSString *myTextG= [NSString stringWithContentsOfFile:filePathG encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresG = [myTextG componentsSeparatedByString:#"-"];
NSString *filePathH = [[NSBundle mainBundle] pathForResource:#"H" ofType:#"txt"];
NSString *myTextH= [NSString stringWithContentsOfFile:filePathH encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresH = [myTextH componentsSeparatedByString:#"-"];
NSString *filePathI = [[NSBundle mainBundle] pathForResource:#"I" ofType:#"txt"];
NSString *myTextI= [NSString stringWithContentsOfFile:filePathI encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresI = [myTextI componentsSeparatedByString:#"-"];
NSString *filePathJ = [[NSBundle mainBundle] pathForResource:#"J" ofType:#"txt"];
NSString *myTextJ= [NSString stringWithContentsOfFile:filePathJ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresJ = [myTextJ componentsSeparatedByString:#"-"];
NSString *filePathK = [[NSBundle mainBundle] pathForResource:#"K" ofType:#"txt"];
NSString *myTextK= [NSString stringWithContentsOfFile:filePathK encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresK = [myTextK componentsSeparatedByString:#"-"];
NSString *filePathL = [[NSBundle mainBundle] pathForResource:#"L" ofType:#"txt"];
NSString *myTextL= [NSString stringWithContentsOfFile:filePathL encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresL = [myTextL componentsSeparatedByString:#"-"];
NSString *filePathM = [[NSBundle mainBundle] pathForResource:#"M" ofType:#"txt"];
NSString *myTextM= [NSString stringWithContentsOfFile:filePathM encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresM = [myTextM componentsSeparatedByString:#"-"];
NSString *filePathN = [[NSBundle mainBundle] pathForResource:#"N" ofType:#"txt"];
NSString *myTextN = [NSString stringWithContentsOfFile:filePathN encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresN = [myTextN componentsSeparatedByString:#"-"];
NSString *filePathO = [[NSBundle mainBundle] pathForResource:#"O" ofType:#"txt"];
NSString *myTextO= [NSString stringWithContentsOfFile:filePathO encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresO = [myTextO componentsSeparatedByString:#"-"];
NSString *filePathP = [[NSBundle mainBundle] pathForResource:#"P" ofType:#"txt"];
NSString *myTextP= [NSString stringWithContentsOfFile:filePathP encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresP = [myTextP componentsSeparatedByString:#"-"];
NSString *filePathQ = [[NSBundle mainBundle] pathForResource:#"Q" ofType:#"txt"];
NSString *myTextQ= [NSString stringWithContentsOfFile:filePathQ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresQ = [myTextQ componentsSeparatedByString:#"-"];
NSString *filePathR = [[NSBundle mainBundle] pathForResource:#"R" ofType:#"txt"];
NSString *myTextR= [NSString stringWithContentsOfFile:filePathR encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresR = [myTextR componentsSeparatedByString:#"-"];
NSString *filePathS = [[NSBundle mainBundle] pathForResource:#"S" ofType:#"txt"];
NSString *myTextS= [NSString stringWithContentsOfFile:filePathS encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresS = [myTextS componentsSeparatedByString:#"-"];
NSString *filePathT = [[NSBundle mainBundle] pathForResource:#"T" ofType:#"txt"];
NSString *myTextT= [NSString stringWithContentsOfFile:filePathT encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresT = [myTextT componentsSeparatedByString:#"-"];
NSString *filePathU = [[NSBundle mainBundle] pathForResource:#"U" ofType:#"txt"];
NSString *myTextU= [NSString stringWithContentsOfFile:filePathU encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresU = [myTextU componentsSeparatedByString:#"-"];
NSString *filePathV = [[NSBundle mainBundle] pathForResource:#"V" ofType:#"txt"];
NSString *myTextV= [NSString stringWithContentsOfFile:filePathV encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresV = [myTextV componentsSeparatedByString:#"-"];
NSString *filePathW = [[NSBundle mainBundle] pathForResource:#"W" ofType:#"txt"];
NSString *myTextW= [NSString stringWithContentsOfFile:filePathW encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresW = [myTextW componentsSeparatedByString:#"-"];
//none with "X"
//NSString *filePathX = [[NSBundle mainBundle] pathForResource:#"X" ofType:#"txt"];
//NSString *myTextX= [NSString stringWithContentsOfFile:filePathX encoding:NSUTF8StringEncoding error:nil];
//NSArray *arrayStructuresX = [myTextX componentsSeparatedByString:#"-"];
NSString *filePathY = [[NSBundle mainBundle] pathForResource:#"Y" ofType:#"txt"];
NSString *myTextY= [NSString stringWithContentsOfFile:filePathY encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresY = [myTextY componentsSeparatedByString:#"-"];
NSString *filePathZ = [[NSBundle mainBundle] pathForResource:#"Z" ofType:#"txt"];
NSString *myTextZ= [NSString stringWithContentsOfFile:filePathZ encoding:NSUTF8StringEncoding error:nil];
NSArray *arrayStructuresZ = [myTextZ componentsSeparatedByString:#"-"];
NSLog(#"here4");
NSLog(#"here5");
[listOfItems addObjectsFromArray:arrayStructuresA];
[listOfItems addObjectsFromArray:arrayStructuresB];
[listOfItems addObjectsFromArray:arrayStructuresC];
[listOfItems addObjectsFromArray:arrayStructuresD];
[listOfItems addObjectsFromArray:arrayStructuresE];
[listOfItems addObjectsFromArray:arrayStructuresF];
[listOfItems addObjectsFromArray:arrayStructuresG];
[listOfItems addObjectsFromArray:arrayStructuresH];
[listOfItems addObjectsFromArray:arrayStructuresI];
[listOfItems addObjectsFromArray:arrayStructuresJ];
[listOfItems addObjectsFromArray:arrayStructuresK];
[listOfItems addObjectsFromArray:arrayStructuresL];
[listOfItems addObjectsFromArray:arrayStructuresM];
[listOfItems addObjectsFromArray:arrayStructuresN];
[listOfItems addObjectsFromArray:arrayStructuresO];
[listOfItems addObjectsFromArray:arrayStructuresP];
[listOfItems addObjectsFromArray:arrayStructuresQ];
[listOfItems addObjectsFromArray:arrayStructuresR];
[listOfItems addObjectsFromArray:arrayStructuresS];
[listOfItems addObjectsFromArray:arrayStructuresT];
[listOfItems addObjectsFromArray:arrayStructuresU];
[listOfItems addObjectsFromArray:arrayStructuresV];
[listOfItems addObjectsFromArray:arrayStructuresW];
// [listOfItems addObjectsFromArray:arrayStructuresX];
[listOfItems addObjectsFromArray:arrayStructuresY];
[listOfItems addObjectsFromArray:arrayStructuresZ];
//set the titles
self.navigationItem.title = #"Countries";
NSLog(#"here6");
//[StartWithA addObjectFromArray:arrayStructuresA];
NSLog(#"here6.5");
NSDictionary *StartWithADict = [NSDictionary dictionaryWithObject:arrayStructuresA forKey:#"Countries"];
NSLog(#"here7");
//NSDictionary *countriesToLiveInDict = [NSDictionary dictionaryWithObject:countriesToLiveInArray forKey:#"Countries"];
//[StartWithB addObjectsFromArray:arrayStructuresB];
NSDictionary *StartWithBDict = [NSDictionary dictionaryWithObject:arrayStructuresB forKey:#"Countries"];
//[StartWithC addObjectsFromArray:arrayStructuresC];
NSDictionary *StartWithCDict = [NSDictionary dictionaryWithObject:arrayStructuresC forKey:#"Countries"];
// [StartWithD addObjectsFromArray:arrayStructuresD];
NSDictionary *StartWithDDict = [NSDictionary dictionaryWithObject:arrayStructuresD forKey:#"Countries"];
// [StartWithE addObjectsFromArray:arrayStructuresE];
NSDictionary *StartWithEDict = [NSDictionary dictionaryWithObject:arrayStructuresE forKey:#"Countries"];
//[StartWithF addObjectsFromArray:arrayStructuresF];
NSDictionary *StartWithFDict = [NSDictionary dictionaryWithObject:arrayStructuresF forKey:#"Countries"];
// [StartWithG addObjectsFromArray:arrayStructuresG];
NSDictionary *StartWithGDict = [NSDictionary dictionaryWithObject:arrayStructuresG forKey:#"Countries"];
// [StartWithH addObjectsFromArray:arrayStructuresH];
NSDictionary *StartWithHDict = [NSDictionary dictionaryWithObject:arrayStructuresH forKey:#"Countries"];
// [StartWithI addObjectsFromArray:arrayStructuresI];
NSDictionary *StartWithIDict = [NSDictionary dictionaryWithObject:arrayStructuresI forKey:#"Countries"];
// [StartWithJ addObjectsFromArray:arrayStructuresJ];
NSDictionary *StartWithJDict = [NSDictionary dictionaryWithObject:arrayStructuresJ forKey:#"Countries"];
// [StartWithK addObjectsFromArray:arrayStructuresK];
NSDictionary *StartWithKDict = [NSDictionary dictionaryWithObject:arrayStructuresK forKey:#"Countries"];
//[StartWithL addObjectsFromArray:arrayStructuresL];
NSDictionary *StartWithLDict = [NSDictionary dictionaryWithObject:arrayStructuresL forKey:#"Countries"];
// [StartWithM addObjectsFromArray:arrayStructuresM];
NSDictionary *StartWithMDict = [NSDictionary dictionaryWithObject:arrayStructuresM forKey:#"Countries"];
//[StartWithN addObjectsFromArray:arrayStructuresN];
NSDictionary *StartWithNDict = [NSDictionary dictionaryWithObject:arrayStructuresN forKey:#"Countries"];
// [StartWithO addObjectsFromArray:arrayStructuresO];
NSDictionary *StartWithODict = [NSDictionary dictionaryWithObject:arrayStructuresO forKey:#"Countries"];
// [StartWithP addObjectsFromArray:arrayStructuresP];
NSDictionary *StartWithPDict = [NSDictionary dictionaryWithObject:arrayStructuresP forKey:#"Countries"];
// [StartWithQ addObjectsFromArray:arrayStructuresQ];
NSDictionary *StartWithQDict = [NSDictionary dictionaryWithObject:arrayStructuresQ forKey:#"Countries"];
//[StartWithR addObjectsFromArray:arrayStructuresR];
NSDictionary *StartWithRDict = [NSDictionary dictionaryWithObject:arrayStructuresR forKey:#"Countries"];
// [StartWithS addObjectsFromArray:arrayStructuresS];
NSDictionary *StartWithSDict = [NSDictionary dictionaryWithObject:arrayStructuresS forKey:#"Countries"];
/// [StartWithT addObjectsFromArray:arrayStructuresT];
NSDictionary *StartWithTDict = [NSDictionary dictionaryWithObject:arrayStructuresT forKey:#"Countries"];
// [StartWithU addObjectsFromArray:arrayStructuresU];
NSDictionary *StartWithUDict = [NSDictionary dictionaryWithObject:arrayStructuresU forKey:#"Countries"];
// [StartWithV addObjectsFromArray:arrayStructuresV];
NSDictionary *StartWithVDict = [NSDictionary dictionaryWithObject:arrayStructuresV forKey:#"Countries"];
// [StartWithW addObjectsFromArray:arrayStructuresW];
NSDictionary *StartWithWDict = [NSDictionary dictionaryWithObject:arrayStructuresW forKey:#"Countries"];
//NSMutableArray *StartWithX;
//[StartWithX addObjectsFromArray:arrayStructuresX];
//NSDictionary *StartWithXDict = [NSDictionary dictionaryWithObject:arrayStructuresX forKey:#"Countries"];
// [StartWithY addObjectsFromArray:arrayStructuresY];
NSDictionary *StartWithYDict = [NSDictionary dictionaryWithObject:arrayStructuresY forKey:#"Countries"];
// [StartWithZ addObjectsFromArray:arrayStructuresZ];
NSDictionary *StartWithZDict = [NSDictionary dictionaryWithObject:arrayStructuresZ forKey:#"Countries"];
NSLog(#"Here8");
[listOfItems addObject:StartWithADict];
[listOfItems addObject:StartWithBDict];
[listOfItems addObject:StartWithCDict];
[listOfItems addObject:StartWithDDict];
[listOfItems addObject:StartWithEDict];
[listOfItems addObject:StartWithFDict];
[listOfItems addObject:StartWithGDict];
[listOfItems addObject:StartWithHDict];
[listOfItems addObject:StartWithIDict];
[listOfItems addObject:StartWithJDict];
[listOfItems addObject:StartWithKDict];
[listOfItems addObject:StartWithLDict];
[listOfItems addObject:StartWithMDict];
[listOfItems addObject:StartWithNDict];
[listOfItems addObject:StartWithODict];
[listOfItems addObject:StartWithPDict];
[listOfItems addObject:StartWithQDict];
[listOfItems addObject:StartWithRDict];
[listOfItems addObject:StartWithSDict];
[listOfItems addObject:StartWithTDict];
[listOfItems addObject:StartWithUDict];
[listOfItems addObject:StartWithVDict];
[listOfItems addObject:StartWithWDict];
//[listOfItems addObject:StartWithXDict];
[listOfItems addObject:StartWithYDict];
[listOfItems addObject:StartWithZDict];
NSLog(#"Here9");
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark Table view methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
NSLog(#"Here10");
NSLog(#"%d", [listOfItems count]);
return [listOfItems count];
}
//this sets the number of row in the table view, by couting the number of objects (countries) in the array//
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(#"Here12");
//Number of rows it should expect should be based on the section
NSDictionary *dictionary = [listOfItems objectAtIndex:section];
NSArray *array = [dictionary objectForKey:#"Countries"];
NSLog(#"this is the array count - %d", [array count]);
return [array count];
NSLog(#"Here13");
}// Customize the number of rows in the table view.
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(#"Here14");
static NSString *CellIdentifier = #"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell.
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:#"Countries"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
[cell.textLabel setText:cellValue];
//NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
//[cell.textLabel setText:cellValue];
//[cell.textLabel setText:cellValue];
NSLog(#"Here15");
return cell;
//NSLog(cellValue);
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSLog(#"Here16");
if (section == 0) {
return #"A";
}
if (section == 1) {
return #"B";
}
if (section == 2) {
return #"C";
}
if (section == 3) {
return #"D";
}
if (section == 4) {
return #"E";
}
if (section == 5) {
return #"F";
}
if (section == 6) {
return #"G";
}
if (section == 7) {
return #"H";
}
if (section == 8) {
return #"I";
}
if (section == 9) {
return #"J";
}
if (section == 10) {
return #"K";
}
if (section == 11) {
return #"L";
}
if (section == 12) {
return #"M";
}
if (section == 13) {
return #"N";
}
if (section == 14) {
return #"O";
}
if (section == 15) {
return #"P";
}
if (section == 16) {
return #"Q";
}
if (section == 17) {
return #"R";
}
if (section == 18) {
return #"S";
}
if (section == 19) {
return #"T";
}
if (section == 20) {
return #"U";
}
if (section == 21) {
return #"V";
}
if (section == 22) {
return #"W";
}
//if (section==0) {
//return #"X";
//}
if (section == 23) {
return #"Y";
}
if (section == 24) {
return #"Z";
}
return #"";
//NSLog(#"%d", [listOfItems count]);
NSLog(#"That whole error thing");
}
- (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{
NSLog(#"Here17");
return UITableViewCellAccessoryDisclosureIndicator;
}
// Override to support row selection in the table view.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(#"Here18");
//Get the selected country
NSDictionary *dictionary = [listOfItems objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:#"Countries"];
NSString *selectedCountry = [array objectAtIndex:indexPath.row];
//Initialize the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:#"DetailView" bundle:[NSBundle mainBundle]];
dvController.selectedCountry = selectedCountry;
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
dvController = nil;
/*
NSString *selectedCountry = [listOfItems objectAtIndex:indexPath.row];
//init the detail view controller and display it.
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:#"DetailView" bundle:[NSBundle mainBundle]];
dvController.selectedCountry = selectedCountry;
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
dvController = nil;
*/
// Navigation logic may go here -- for example, create and push another view controller.
// AnotherViewController *anotherViewController = [[AnotherViewController alloc] initWithNibName:#"AnotherView" bundle:nil];
// [self.navigationController pushViewController:anotherViewController animated:YES];
// [anotherViewController release];
NSLog(#"Here19");
}
- (void)dealloc {
//dealloc the array
[listOfItems release];
NSLog(#"Here20");
[super dealloc];
}
#end
The error message is a bit cryptic, but it basically says that you tried to send the message "objectForKey:" to an object of class "NSString", and that method doesn't exist in the NSString class. It sounds like you're programatically grabbing an object and expecting that object to be an NSDictionary. At runtime, your NSDictionary * is actually being set to an NSString *, and you don't get an exception until that object is actually used incorrectly.
The fact that you can say "give me this object of unknown type, assume it's a dictionary, and call this function" is actually pretty cool once you get comfortable with Objective-C, but it's hell to get used to. I've always found that Objective-C assumes you know what you're doing. Some people love it because it lets them write clean, concise code -- but it raises the learning curve quite a bit.
Feel free to post a code snippet if you need more help tracking this one down!
Ben
UPDATE:
It looks like when you setup your data in viewDidLoad:, you are loading a bunch of arrays from separate files. Then you add the contents of those arrays to your main data array like this:
[listOfItems addObjectsFromArray:arrayStructuresF];
I think those lines shouldn't be there. Further down, you're creating dictionaries for each letter and then adding those to the listOfItems. At the end of the function, listOfItems contains a whole bunch of string items AND a whole bunch of dictionaries. The string items come first, so you're getting NSStrings when you expect NSDictionaries.
P.S. You might want to condense some of this into loops once it's all working. You could create an array of the letters A,B,C,D, etc... and then load all the files in a loop using filenames made using NSString's stringWithFormat:. Just a thought!
The object at 0x3814530 is a NSString and yet you treat it as a NSDictionary, and you get a runtime exception.
This article describes breaking on exceptions.
Use the debugger to inspect the code that is adjacent to your exception.
Try turning on NSZombiesEnabled.
Double-click your executable in the Executable group of your project.
Click the Arguments tab.
In the "Variables to be set in the environment:" section, create a new variable called NSZombieEnabled and set it to YES.
I'm betting you'll find you're sending a message to an object that's already been released to the point that it's been deallocated.