Error beim Einlesen einer .plist-Datei

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Error beim Einlesen einer .plist-Datei

    Hallo liebe Xcode-Community,

    ich bin ein Neuling im Bereich App-Entwicklung (IPhone) und bei den ersten Schritten kleinere Apps zu programmieren.
    Zu meinem Fehler: Das Programm sieht vor eine .plist einzulesen und diese in einem 2-Spalten-Picker auszugeben (Spalte1: Staatennamen Spalte2:Zip codes)
    Ich benutze zum lernen das Buch "iPhone 3 Development" von apress und tippe dort den code grundsätzlich erstmal ab, um zu sehen wie es zu funktionieren scheint.
    Das Buch ist allerdings noch für Xcode3.x.x geschrieben während ich Xcode4.0.2 benutze. Jetzt gibt mir Xcode beim starten der App folgenden Fehler aus:
    "Thread 1: Program recieved signal: "SIGABRT". Schaue ich mir den Fehler genauer an so sagt er mir das meine Variable "zips" eine ungültige Summe (invalid Summary) enthält.
    (__NSCFDictionary* zips 0x4b5bfc0 Invalid Summary) da ich Neuling bin kann ich leider keine wichtigen Zusatzinformationen geben, da ich noch nicht einschätzen kann aus welcher Richtung das Problem kommt. Hier einmal der Code zu meinem Programm: (Auf der .xib gibt es nur den Picker und einen RectRoundButton zur Ausgabe des Wertes in einem alert)

    Brainfuck-Quellcode

    1. // DependentComponentPickerViewController.h
    2. // Pickers
    3. //
    4. // Created by Developer on 16.08.11.
    5. // Copyright 2011 __MyCompanyName__. All rights reserved.
    6. //
    7. #import <UIKit/UIKit.h>
    8. #define kStateComponent 0
    9. #define kZipComponent 1
    10. @interface DependentComponentPickerViewController : UIViewController
    11. <UIPickerViewDelegate, UIPickerViewDataSource>
    12. {
    13. UIPickerView *picker;
    14. NSDictionary *stateZips;
    15. NSArray *states;
    16. NSArray *zips;
    17. }
    18. @property (nonatomic, retain) IBOutlet UIPickerView *picker;
    19. @property (nonatomic, retain) NSDictionary *stateZips;
    20. @property (nonatomic, retain) NSArray *states;
    21. @property (nonatomic, retain) NSArray *zips;
    22. -(IBAction)buttonPressed;
    23. @end
    24. //
    25. // DependentComponentPickerViewController.m
    26. // Pickers
    27. //
    28. // Created by Developer on 16.08.11.
    29. // Copyright 2011 __MyCompanyName__. All rights reserved.
    30. //
    31. #import "DependentComponentPickerViewController.h"
    32. @implementation DependentComponentPickerViewController
    33. @synthesize picker;
    34. @synthesize stateZips;
    35. @synthesize states;
    36. @synthesize zips;
    37. -(IBAction)buttonPressed
    38. {
    39. NSInteger stateRow = [picker selectedRowInComponent:kStateComponent];
    40. NSInteger zipRow = [picker selectedRowInComponent:kZipComponent];
    41. NSString *state = [self.states objectAtIndex:stateRow];
    42. NSString *zip = [self.zips objectAtIndex:zipRow];
    43. NSString *title = [[NSString alloc] initWithFormat:@"You selected zip code %@.", zip];
    44. NSString *message = [[NSString alloc] initWithFormat:@"%@ is in %@", zip, state];
    45. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
    46. message:message
    47. delegate:nil
    48. cancelButtonTitle:@"Ok"
    49. otherButtonTitles:nil];
    50. [alert show];
    51. [alert release];
    52. [title release];
    53. [message release];
    54. }
    55. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    56. {
    57. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    58. if (self) {
    59. // Custom initialization
    60. }
    61. return self;
    62. }
    63. - (void)dealloc
    64. {
    65. [picker release];
    66. [stateZips release];
    67. [states release];
    68. [zips release];
    69. [super dealloc];
    70. }
    71. - (void)didReceiveMemoryWarning
    72. {
    73. // Releases the view if it doesn't have a superview.
    74. [super didReceiveMemoryWarning];
    75. // Release any cached data, images, etc that aren't in use.
    76. }
    77. #pragma mark - View lifecycle
    78. - (void)viewDidLoad
    79. {
    80. NSBundle *bundle = [NSBundle mainBundle];
    81. NSString *plistPath = [bundle pathForResource:@"statelist" ofType:@"plist"];
    82. NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    83. self.stateZips = dictionary;
    84. [dictionary release];
    85. NSArray *components = [self.stateZips allKeys];
    86. NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
    87. self.states = sorted;
    88. NSString *selectedState = [self.states objectAtIndex:0];
    89. NSArray *array = [stateZips objectForKey:selectedState];
    90. self.zips = array;
    91. [super viewDidLoad];
    92. // Do any additional setup after loading the view from its nib.
    93. }
    94. - (void)viewDidUnload
    95. {
    96. self.picker = nil;
    97. self.stateZips = nil;
    98. self.states = nil;
    99. self.zips = nil;
    100. [super viewDidUnload];
    101. // Release any retained subviews of the main view.
    102. // e.g. self.myOutlet = nil;
    103. }
    104. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    105. {
    106. // Return YES for supported orientations
    107. return (interfaceOrientation == UIInterfaceOrientationPortrait);
    108. }
    109. #pragma mark -
    110. #pragma mark Picker Data Source Methods
    111. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    112. return 2;
    113. }
    114. -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    115. if (component == kStateComponent)
    116. return [self.states count];
    117. return [self.zips count];
    118. }
    119. #pragma mark Picker Delegate Methods
    120. -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    121. if (component == kStateComponent)
    122. return [self.states objectAtIndex:row];
    123. return [self.zips objectAtIndex:row]; <------ Hier entsteht der Fehler! <------------------------------------<-<-<-<-<-<
    124. }
    125. -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    126. if (component == kZipComponent)
    127. return 90;
    128. return 200;
    129. }
    130. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    131. if (component == kStateComponent) {
    132. NSString *selectedState = [self.states objectAtIndex:row];
    133. NSArray *array = [stateZips objectForKey:selectedState];
    134. self.zips = array;
    135. [picker selectRow:0 inComponent:kZipComponent animated:YES];
    136. [picker reloadComponent:kZipComponent];
    137. }
    138. }
    139. @end
    Alles anzeigen

    Es würde mich sehr freuen, wenn mir jemand helfen könnte.

    /edit: Und wenn mir jemand verrät, wie ich den Code besser lesbar hier posten kann wäre ich ihm ebenfalls dankbar! :)
    /edit die Zweite: Hoffe ich hab den Code jetzt in eine angenehm zu lesende Form gebracht. (Danke an Thallius)
    MfG
    Blaluma

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Blaluma ()

  • Blaluma schrieb:

    Hallo liebe Xcode-Community,

    ich bin ein Neuling im Bereich App-Entwicklung (IPhone) und bei den ersten Schritten kleinere Apps zu programmieren.
    Zu meinem Fehler: Das Programm sieht vor eine .plist einzulesen und diese in einem 2-Spalten-Picker auszugeben (Spalte1: Staatennamen Spalte2:Zip codes)
    Ich benutze zum lernen das Buch "iPhone 3 Development" von apress und tippe dort den code grundsätzlich erstmal ab, um zu sehen wie es zu funktionieren scheint.
    Das Buch ist allerdings noch für Xcode3.x.x geschrieben während ich Xcode4.0.2 benutze. Jetzt gibt mir Xcode beim starten der App folgenden Fehler aus:
    "Thread 1: Program recieved signal: "SIGABRT". Schaue ich mir den Fehler genauer an so sagt er mir das meine Variable "zips" eine ungültige Summe (invalid Summary) enthält.
    (__NSCFDictionary* zips 0x4b5bfc0 Invalid Summary) da ich Neuling bin kann ich leider keine wichtigen Zusatzinformationen geben, da ich noch nicht einschätzen kann aus welcher Richtung das Problem kommt. Hier einmal der Code zu meinem Programm: (Auf der .xib gibt es nur den Picker und einen RectRoundButton zur Ausgabe des Wertes in einem alert)

    Quellcode

    1. // DependentComponentPickerViewController.h
    2. // Pickers
    3. //
    4. // Created by Developer on 16.08.11.
    5. // Copyright 2011 __MyCompanyName__. All rights reserved.
    6. //
    7. #import <UIKit/UIKit.h>
    8. #define kStateComponent 0
    9. #define kZipComponent 1
    10. @interface DependentComponentPickerViewController : UIViewController
    11. <UIPickerViewDelegate, UIPickerViewDataSource>
    12. {
    13. UIPickerView *picker;
    14. NSDictionary *stateZips;
    15. NSArray *states;
    16. NSArray *zips;
    17. }
    18. @property (nonatomic, retain) IBOutlet UIPickerView *picker;
    19. @property (nonatomic, retain) NSDictionary *stateZips;
    20. @property (nonatomic, retain) NSArray *states;
    21. @property (nonatomic, retain) NSArray *zips;
    22. -(IBAction)buttonPressed;
    23. @end
    24. //
    25. // DependentComponentPickerViewController.m
    26. // Pickers
    27. //
    28. // Created by Developer on 16.08.11.
    29. // Copyright 2011 __MyCompanyName__. All rights reserved.
    30. //
    31. #import "DependentComponentPickerViewController.h"
    32. @implementation DependentComponentPickerViewController
    33. @synthesize picker;
    34. @synthesize stateZips;
    35. @synthesize states;
    36. @synthesize zips;
    37. -(IBAction)buttonPressed
    38. {
    39. NSInteger stateRow = [picker selectedRowInComponent:kStateComponent];
    40. NSInteger zipRow = [picker selectedRowInComponent:kZipComponent];
    41. NSString *state = [self.states objectAtIndex:stateRow];
    42. NSString *zip = [self.zips objectAtIndex:zipRow];
    43. NSString *title = [[NSString alloc] initWithFormat:@"You selected zip code %@.", zip];
    44. NSString *message = [[NSString alloc] initWithFormat:@"%@ is in %@", zip, state];
    45. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
    46. message:message
    47. delegate:nil
    48. cancelButtonTitle:@"Ok"
    49. otherButtonTitles:nil];
    50. [alert show];
    51. [alert release];
    52. [title release];
    53. [message release];
    54. }
    55. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    56. {
    57. self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    58. if (self) {
    59. // Custom initialization
    60. }
    61. return self;
    62. }
    63. - (void)dealloc
    64. {
    65. [picker release];
    66. [stateZips release];
    67. [states release];
    68. [zips release];
    69. [super dealloc];
    70. }
    71. - (void)didReceiveMemoryWarning
    72. {
    73. // Releases the view if it doesn't have a superview.
    74. [super didReceiveMemoryWarning];
    75. // Release any cached data, images, etc that aren't in use.
    76. }
    77. #pragma mark - View lifecycle
    78. - (void)viewDidLoad
    79. {
    80. NSBundle *bundle = [NSBundle mainBundle];
    81. NSString *plistPath = [bundle pathForResource:@"statelist" ofType:@"plist"];
    82. NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    83. self.stateZips = dictionary;
    84. [dictionary release];
    85. NSArray *components = [self.stateZips allKeys];
    86. NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)];
    87. self.states = sorted;
    88. NSString *selectedState = [self.states objectAtIndex:0];
    89. NSArray *array = [stateZips objectForKey:selectedState];
    90. self.zips = array;
    91. [super viewDidLoad];
    92. // Do any additional setup after loading the view from its nib.
    93. }
    94. - (void)viewDidUnload
    95. {
    96. self.picker = nil;
    97. self.stateZips = nil;
    98. self.states = nil;
    99. self.zips = nil;
    100. [super viewDidUnload];
    101. // Release any retained subviews of the main view.
    102. // e.g. self.myOutlet = nil;
    103. }
    104. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    105. {
    106. // Return YES for supported orientations
    107. return (interfaceOrientation == UIInterfaceOrientationPortrait);
    108. }
    109. #pragma mark -
    110. #pragma mark Picker Data Source Methods
    111. -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    112. return 2;
    113. }
    114. -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    115. if (component == kStateComponent)
    116. return [self.states count];
    117. return [self.zips count];
    118. }
    119. #pragma mark Picker Delegate Methods
    120. -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    121. if (component == kStateComponent)
    122. return [self.states objectAtIndex:row];
    123. return [self.zips objectAtIndex:row]; <------ Hier entsteht der Fehler!
    124. }
    125. -(CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    126. if (component == kZipComponent)
    127. return 90;
    128. return 200;
    129. }
    130. -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    131. if (component == kStateComponent) {
    132. NSString *selectedState = [self.states objectAtIndex:row];
    133. NSArray *array = [stateZips objectForKey:selectedState];
    134. self.zips = array;
    135. [picker selectRow:0 inComponent:kZipComponent animated:YES];
    136. [picker reloadComponent:kZipComponent];
    137. }
    138. }
    139. @end
    Alles anzeigen

    Es würde mich sehr freuen, wenn mir jemand helfen könnte.

    /edit: Und wenn mir jemand verrät, wie ich den Code besser lesbar hier posten kann wäre ich ihm ebenfalls dankbar! :)

    MfG
    Blaluma


    so ?

    Gruß

    Claus

    P.S. einfach codetags drum herum
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Probiere mal anstelle von:

    Quellcode

    1. NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    2. self.stateZips = dictionary;
    3. [dictionary release];
    4. . .
    5. . .
    6. self.stateZips = [NSDictionary dictionaryWithContentsOfFile:plistPath];
  • Leider immernoch der gleiche Fehler wie vorher (ebenfalls an der gleichen Stelle) ;( :cursing: :wacko:

    /edit sagt: Ich hab den Fehler jetzt erst einmal überprungen und mit etwas ähnlichem weitergemacht (Einem einarmigen Banditen) und bekomme hier ebenfalls den SIGABRT Fehler sobald ich versuche das Programm zu starten....
    Hier hat er das Problem wenn er versucht die Bilder einzulesen, sowie beim Programm davor, wenn er versucht die Liste einzulesen (wenn ich den Quellcode richtig verstanden habe^^). Es müsste also meiner unwissenden Vermutung nach an dem Einlesevorgang liegen, der dem Programm schwierigkeiten bereitet. Ein (diesmal kleiner) Auszug aus dem zweiten Prog ist:

    Quellcode

    1. for (int i = 1 <= 5; i++) {
    2. UIImageView *appleView = [UIImage alloc] initWithImage:apple]; <---- hier tritt der Fehler auf.
    3. ****Weitere Bilder werden geladen****
    4. davor wurde apple definiert:
    5. UIImage *apple = [UIImage imageNamed:@"apple.png"];
    6. ***Weitere Bilder werden definiert***
    7. die Datei apple.png befindet sich im Supporting Files Ordner

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Blaluma ()