1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Programm stürzt ab nach Verwendung von NSArray

Dieses Thema im Forum "OS X-Developer" wurde erstellt von jack.jack, 16.03.10.

  1. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Hallo
    Ich verwende in meinem Programm einen NSMutableArray, wo ich verschiedene NSMutableDictionaries speichere:

    NSMutableDictionary *myDownload = [NSMutableDictionary dictionaryWithObjects:
    [NSArray arrayWithObjects:downloadAddress,
    absolutePath,
    [absolutePath lastPathComponent],
    nil]
    forKeys:
    [NSArray arrayWithObjects:mad:"address",
    @"path",
    @"name",
    nil]];
    [downloadsArray addObject:myDownload];


    Bis dahin funktioniert es. Ich kann Objekte aus dem Array auslesen. Doch später wird in meinem Programm durch NSURLDownload die Funktion

    - (void) downloadDidFinish: (NSURLDownload *)downloader {}

    aufgerufen. Dort kann ich Objekte plötzlich nicht mehr aus dem Array auslesen, wenn ich es versuche, stürzt das Programm ab.
     
  2. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Wie liest du denn aus dem Array 'downloadsArray' aus?

    Gruss ppocket

    PS: Verwende in Zukunft bitte die CODE-Tags, danke!
     
  3. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    So:
     
  4. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Und Du hast downloadsArray auch initialisiert?

    Also z.B. in init
    Code:
    [self setDownloadsArray:[NSMutableArray array]];
    
     
  5. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Ja, ich kann Objekte ja abrufen, nur nicht in dieser Funktion:
     
  6. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Was ist downloadsArray? Instanzvariable? Lokale Variable? Wo und wie initialisierst Du downloadsArray.

    MacApple
     
  7. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Eine Instanzvariable, welche bei der Funktion
    - (void)awakeFromNib
    initialisiert wird.
     
  8. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Du hast das wie vergessen.

    MacApple
     
  9. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Mit:
     
  10. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Könntest du mal ein Wenig mehr Code posten? So kommen wir hier nicht weiter...
     
  11. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Kann leider nicht das ganze Programm posten. Aber hier ist mal der relevante Teil:

     
  12. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Und bei welcher dieser Zeilen crashed es? Wieso meinst Du es läge daran, dass Du nicht mehr aus dem Array lesen kannst?

    MacApple
     
  13. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Mit dem Debugger habe ich es herausgefunden
     
  14. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Jo, diese Aussage hilft ja jetzt echt weiter. Viel Spaß dann noch.

    MacApple
     
  15. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Mach doch sowas wie

    Code:
    NSLog(@"Array: %@\nArrayCount: %d", downloadsArray ,[downloadsArray count]);
    
    in
    Code:
    - (void)downloadDidFinish:(NSURLDownload *)downloader
    
    Ich glaube nämlich eher, dass das was IM Array steht futsch is.
     
  16. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Also ich seh da überhaupt kein Problem dabei mit deinem Array. Im Anhang findest du ein Projekt, bei dem mit deinem Code:

    Code:
    @interface UntitledAppDelegate (Private)
    
    - (void)download;
    - (void)newDownloadComes;
    
    @end
    
    @implementation UntitledAppDelegate
    
    @synthesize window;
    
    - (void) awakeFromNib {
    	downloadsArray = [[NSMutableArray alloc] init];
    }
    
    -(void) download {
    	NSString *downloadAddress = @"http://apple.com/", *absolutePath = [@"~/Desktop/Apple.html" stringByExpandingTildeInPath];
    	
    	NSMutableDictionary *myDownload = [NSMutableDictionary dictionaryWithObjects: [NSArray arrayWithObjects:downloadAddress, absolutePath, [absolutePath lastPathComponent], nil]
    																		 forKeys: [NSArray arrayWithObjects:@"address", @"path", @"name", nil]];
    	
    	[downloadsArray addObject:myDownload];
    	
    	[self newDownloadComes];
    	
    }
    
    - (void)newDownloadComes {
    	if ([downloadsArray count] > 0) {
    		NSMutableDictionary *myDownload = [downloadsArray objectAtIndex:0];
    		NSURLRequest *downloadRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[myDownload objectForKey:@"address"]]];
    		NSURLDownload *videoDownload = [[NSURLDownload alloc] initWithRequest:downloadRequest delegate:self];
    			
    		if (videoDownload) {
    			[videoDownload setDestination:[myDownload objectForKey:@"path"] allowOverwrite:YES];
    		}
    	}
    }
    
    - (void)downloadDidFinish:(NSURLDownload *)inDownloader {
    	NSLog(@"Array: %@\nArrayCount: %d", downloadsArray ,[downloadsArray count]);
    }
    
    - (IBAction)doDownload:(id)inSender { [self download]; }
    
    @end
    
    ohne Probleme die Apple-Startseite auf den Desktop runterlädt. Aber ja, wenn du uns nicht mehr Code schicken kannst, können wir auch nicht weiterhelfen, ausser dir zu sagen, dass in diesem Code-Abschnitt kein Fehler zu finden ist!

    Gruss ppocket
     

    Anhänge:

  17. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Ich habe mir dein Programm mal angeschaut. Aber genau so habe ich es gemacht. Werde bald ein bisschen mehr Code posten.
     
  18. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Wenn ich Informationen aus dem Array/Dictionary abrufe kommt folgendes in der Debugger Console:

    2010-03-19 17:10:47.460 QuickTube[6283:a0f] -[NSCFOutputStream objectForKey:]: unrecognized selector sent to instance 0x116a708c0
     
  19. jack.jack

    jack.jack Klarapfel

    Dabei seit:
    20.03.09
    Beiträge:
    280
    Kann es sein, dass ich in dieser Zeile etwas falsch gemacht habe? (Voraussetzung dataSourceOfTheTable ist ein allocierter und initialisierter NSMutableArray)

     
  20. nelfisch

    nelfisch Carola

    Dabei seit:
    15.03.08
    Beiträge:
    108
    Äh, kurze Frage, neben der Aussage, das wir echt mehr Code brauen und du das vielleicht noch mal in einem Post zusammenfassen könntes (ist echt unübersichtlich geworden!): Warum speicherst du dein Dictionary in dem MutableArray? Speicher doch direkt das Dictionary, das erspart dir dieses dumme Klammern auch an einigen vielen Stellen. Ich habe irgendwie im Gefühl, dass das einfach nicht "schön" ist und deswegen auch nicht funktioniert, dass du das Dictionary in einem sonst leeren MutableArray speicherst. Mache deine Varibale vom Typ NSMutableArray zu NSDictionary und dann guck was passiert..:)
     

Diese Seite empfehlen