Я новичок в ObC и имею проблему, которую я просто не могу исправить. Там могут быть и другие вопросы, как хорошо, но основной вопрос заключается в следующем:ObC: сбой приложений после возврата NSMutableArray?
- Запуск приложения
- Нажмите кнопку = загрузить новый вид
- В новом viewDidLoad я называю еще один объект/функцию и отправить NSMutableArray
- Данные процесса и отправьте обратно NSMutableArray
- Ошибка приложения, см. Комментарий где. Чаще всего, когда я возвращаюсь назад и обратно, но иногда в первый раз
Как я к этому отношусь, я думаю, я делаю много этого неправильно, но кто-то может взглянуть на код и дать мне несколько советов , Я бы предположил, что у меня проблема с выпуском чего-то.
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@" ");
NSLog(@"viewDidLoad ");
NSLog(@" ");
NSLog(@">>Processing prepareGame<<");
NSMutableArray *propArray1 = [[NSMutableArray alloc] initWithObjects:@"9999", nil]; //Init with dummy numbers
AccessPropertiesFile *readMyProperties = [AccessPropertiesFile new]; //Init function call to read file
NSLog(@"Prepare to call readProperties");
propArray1 = [readMyProperties readPropertiesFile:propArray1];
NSLog(@"Back from readProperties:error after this");
/*
for (NSString *element in propArray1) {
NSLog(@"Elements in prop2Array; %@", element);
}
*/
[readMyProperties release];
[propArray1 release];
}
-(NSMutableArray *)readPropertiesFile:(NSMutableArray *)readDataArray {
NSLog(@"Processing readProperties");
// For error information
NSError *error;
//Prepare File Manager
NSString *filePath = [self dataFilePath];
NSFileManager *fileMgr;
fileMgr = [NSFileManager defaultManager];
NSArray *propertiesArray = [NSArray alloc]; //Alloc array
//Check from what module the call is coming from to ecide what to do
if ([fileMgr fileExistsAtPath: filePath] == NO) {
NSLog (@"File not found");
//File does not exists, this is the first time the game starts
//Set up default parameters
NSString *fileString [email protected]"0\n30\n30\n10\n1\n1\n1\n2\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n1\n";
// Write default parameters to file
[fileString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
propertiesArray = [fileString componentsSeparatedByString:@"\n"]; // each line, adjust character for line endings
}
else { //File exists
NSLog (@"File exists");
NSString *fileString = [NSString stringWithContentsOfFile:filePath
encoding:NSUTF8StringEncoding error:nil]; // reads file into memory as an NSString
propertiesArray = [fileString componentsSeparatedByString:@"\n"]; // each line, adjust character for line endings
}
//Clean readDataArray
[readDataArray removeAllObjects];
//Populate return array
for (NSString *element in propertiesArray) {
//NSLog(@"Elements in propertiesArray; %@", element);
[readDataArray addObject:element];
}
NSLog(@"readDataArray: %@", readDataArray);
[propertiesArray release];
[readDataArray autorelease];
NSLog(@"returning from readProperties");
return readDataArray;
}
@end
Спасибо, я забрал это в первом методе, с viewDidLoad, и он все еще прерывается во второй раз, когда я запускаю метод. Первый метод активируется, когда я перехожу в «newGame» view (viewDidLoad), затем обрабатываю, как описано выше, и когда это делается, я нажимаю кнопку «Назад» и возвращаюсь назад. Второй раз, когда я goto 'newGame', он ломается. – PeterK
В этом коде есть ряд странностей, которые указывают на не очень хорошее понимание управления памятью. Например, ваша обработка readDataArray (и метода readPropertiesFile в целом) очень странная. Я рекомендую ознакомиться с документами по управлению памятью и переосмыслить ваш общий подход. –