/ / Prečo môj program môže bežať v Xcode, ale nemôže bežať ako samostatná aplikácia? - cieľ-c, xcode

Prečo môže byť môj program spustený v Xcode, ale nemôže fungovať ako samostatná aplikácia? - objekt-c, xcode

Môj program načíta niektoré údaje zo súboru a potom ich nakreslí.

Časť na čítanie súborov je taká:

- (void)load_file
{
NSFileHandle *inFile = [NSFileHandle fileHandleForReadingAtPath:@"map_data"];
NSData  *myData=[inFile readDataToEndOfFile];
NSString *myText=[[NSString alloc]initWithData:myData encoding:NSASCIIStringEncoding];
NSArray *values = [myText componentsSeparatedByString:@"n"];
for (NSString *string in values) {
NSArray *lines=[string componentsSeparatedByString:@" "];
if ([lines count] != 2) break;
NSPoint point= NSMakePoint([lines[0] floatValue], [lines[1] floatValue]);
[points addObject:[NSValue valueWithPoint:point]];
}
[self setNeedsDisplay:YES];
}

Pri ladení som dátový súbor vložil do adresára [NSBundle mainBundle] a program funguje dobre.

Keď však použijem aplikáciu na odstránenie aplikácie, nikdy sa nespustí. Dátový súbor som vložil na rovnakú cestu s aplikáciou, ale zdá sa, že sa nepodarilo načítať.


aktualizovať

Skúšal som použiť c ++, ale stále to zlyháva.

- (void)load_file
{
ifstream inf("map_data");
double x, y;
while (inf >> x >> y) [points addObject:[NSValue valueWithPoint:NSMakePoint(x, y)]];
inf.close();
}

Snažil som sa zmeniť schému zostavenia na uvoľnenie a spustenie, čo je v poriadku. Ale kedykoľvek prejdem priamo do vyhľadávača aplikácie a dvakrát na ňu kliknem, nefunguje to a zdá sa, že sa nič nenačíta.

odpovede:

1 pre odpoveď č. 1

Nie som si istý, ako sa zaobchádza s relatívnymi cestami NSFileHandle, ale obvykle nastavujete cesty pomocou NSBundle trieda.

NSString *path = [[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"ext"];

NSString môžete tiež jednoducho inicializovať z obsahu súboru, nemusíte ho najskôr prečítať do súboru NSData použitím NSFileHandle.

NSString *text = [[NSString alloc] initWithContentsOfFile:path
encoding:NSASCIIStringEncoding error:nil];

(Ak chcete správne spracovanie chýb, použite parameter chyby)


2 pre odpoveď č. 2
  • pridať súbor do projektu ako zdroj (to spôsobí, že sa skopíruje do obálky aplikácie na správnom mieste)

  • použite `[[NSBundle mainBundle] pathForResource: @" map_data "ofType: nil];

To by vám malo poskytnúť cestu k súboru.Súbor by nemal byť kopírovaný manuálne, nemal by byť vedľa obálky aplikácie, ani by ste sa nikdy nemali domnievať, že by ste sa mali pokúsiť súbor zmeniť alebo vymeniť, akonáhle je v obale aplikácie.

Dôvod, prečo sa zdá, že to niekedy funguje, je iba náhoda. Miniete čiastočnú cestu do NSFileHandle a stane sa, že aktuálny pracovný adresár vašej aplikácie smeruje niekedy na správne miesto, aby bol k dispozícii dátový súbor.