• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Programm stürzt ab nach Verwendung von NSArray

jack.jack

Klarapfel
Registriert
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.
 

Poljpocket

Salvatico di Campascio
Registriert
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!
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Und Du hast downloadsArray auch initialisiert?

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

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Was ist downloadsArray? Instanzvariable? Lokale Variable? Wo und wie initialisierst Du downloadsArray.

MacApple
 

jack.jack

Klarapfel
Registriert
20.03.09
Beiträge
280
Eine Instanzvariable, welche bei der Funktion
- (void)awakeFromNib
initialisiert wird.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Könntest du mal ein Wenig mehr Code posten? So kommen wir hier nicht weiter...
 

jack.jack

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

In AppController.h:
NSMutableArray *downloadsArray;
In AppController.m:
- (void) awakeFromNib {
downloadsArray = [[NSMutableArray alloc] init];
}
-(void) download {
NSMutableDictionary *myDownload = [NSMutableDictionary dictionaryWithObjects:
[NSArray arrayWithObjects:downloadAddress,
absolutePath,
[absolutePath lastPathComponent],
nil]
forKeys:
[NSArray arrayWithObjects:mad:"address",
@"path",
@"name",
nil]];
[downloadsArray addObject:myDownload];
[self newDownloadComes];

}

- (void)newDownloadComes {
NSUInteger countOfMyDownloads;
countOfMyDownloads = [downloadsArray count];
if (countOfMyDownloads > 0) {
if (downloadFinish == YES) {
downloadFinish = NO;

NSMutableDictionary *myDownload = (NSMutableDictionary *)[downloadsArray objectAtIndex:0];

NSURLRequest *downloadRequest = [NSURLRequest requestWithURL: [NSURL URLWithString: [myDownload objectForKey:mad:"address"]]];


NSURLDownload *videoDownload = [NSURLDownload alloc];

[videoDownload initWithRequest:downloadRequest delegate:self];

if (videoDownload) {
[videoDownload setDestination:[myDownload objectForKey:mad:"path"] allowOverwrite:YES];

}


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

[dataSourceOfTheTableView addObject:[(NSMutableDictionary *)[downloadsArray objectAtIndex:0] objectForKey:mad:"name"]];
}
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Und bei welcher dieser Zeilen crashed es? Wieso meinst Du es läge daran, dass Du nicht mehr aus dem Array lesen kannst?

MacApple
 

MacApple

Schöner von Bath
Registriert
05.01.04
Beiträge
3.652
Jo, diese Aussage hilft ja jetzt echt weiter. Viel Spaß dann noch.

MacApple
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
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.
 

Poljpocket

Salvatico di Campascio
Registriert
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

  • Untitled_Test..zip
    25,5 KB · Aufrufe: 64

jack.jack

Klarapfel
Registriert
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.
 

jack.jack

Klarapfel
Registriert
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
 

jack.jack

Klarapfel
Registriert
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)

[dataSourceOfTheTable addObject:[NSString stringWithString:[(NSMutableDictionary *)[downloadsArray objectAtIndex:0] objectForKey:mad:"name"]]];
 

nelfisch

Carola
Registriert
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..:)