Я новичок в разработке для iPhone. Я "старая школа" - меня научили использовать процедуры и т. Д. При программировании. В наши дни все ориентировано на объекты, но мой стиль остается таким же, каким был всегда. Пожалуйста, имейте это в виду. Мой проект крошечный и просто доказательство концепции.
Программа ниже работает по таймеру - каждые 30 секунд она будет читать случайное имя ребенка из моей базы данных списков имен, сохраненной в Dictionary.plist моим приложением. Затем он показывает это имя на экране iphone.
Вы можете увидеть соответствующие части кода ниже.
Что происходит - если я увеличу таймер, чтобы запустить его очень быстро - в конце концов, кажется, что ему не хватает памяти или что-то еще, как он показывает ???? вместо следующего случайного имени ребенка.
Я подозреваю, что это связано с тем, что я не закрываю файл базы данных каждый раз, когда читаю его.
В любом случае, может кто-нибудь, пожалуйста, посмотрите на мой код (с учетом моих вышеупомянутых комментариев) и скажите мне, что мне нужно добавить, чтобы он не показывался ???? после стольких пробежек ..
Я открываю файл каждый раз только в ShowNextName, так как не могу найти другой способ сделать это ..
Я знаю, что не очень удобно использовать в начале этого кода переменные, которые являются глобальными и т. Д., Но, может быть, есть способ реструктурировать или добавить что-то, чтобы он не "завис" или стал немного забавным после стольких запусков. ..
Я бы оценил это. Спасибо.
#import "BabyNameViewController.h"
@implementation BabyNameViewController
NSDictionary *dictionary;
NSString *name;
int nameCount = 0;
int RecordIndex = 0;
- (void)ShowNextname;
{
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Dictionary.plist"];
NSArray* plistArray = [NSArray arrayWithContentsOfFile:finalPath];
// Generate a random number between 0 and (the number of records-1) - used as a random index!
RecordIndex=arc4random()%[plistArray count];
// Select and display currently selected record from the array.
dictionary = [plistArray objectAtIndex:RecordIndex];
name = [dictionary objectForKey:@"name"];
[nameLabelOutlet setText: [NSString stringWithFormat: @"Random Baby Name is: %@", name]];
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
// Initial App entry point - startup code..
// Open the dictionary to count the number of names and store it for later use.
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Dictionary.plist"];
NSArray* plistArray = [NSArray arrayWithContentsOfFile:finalPath];
nameCount = [plistArray count];
// Generate random name from database
[self ShowNextname];
// Start up the nameUpdate timer.
[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(nameUpdate) userInfo:nil repeats:YES];
}
-(void) nameUpdate {
[self ShowNextname];
}