1

iOS アプリの開発は初めてで、英語は母国語ではないため、間違いや見苦しいコードがあればご容赦ください。

私が作成しようとしているアプリは、ある特定の日に特定の画像を 1 つだけ表示する必要があります (日付が変更された場合は画像を変更します)。したがって、日付をチェックする無限ループを実装しました。前回変更した画像と異なる場合は、再度画像が変更されます。画像は "YearMonthDay.png" スキームで名前が付けられます (例: "20131017.png")。

私はすでにたくさんのグーグル検索を行い、いくつかのコードをまとめました(かなり醜いことは知っています)が、毎回クラッシュします。

私は本当に助けていただければ幸いです!

smViewController.h:

#import <UIKit/UIKit.h>

@interface smViewController : UIViewController {
  UIImageView* mImageView;
}

@property (nonatomic, retain) IBOutlet UIImageView* imageView;

- (IBAction)contentModeChanged:(UISegmentedControl*)segmentedControl;

@end

smViewController.m

#import "smViewController.h"

@interface smViewController ()

@end

@implementation smViewController
@synthesize imageView = mImageView;

- (void)viewDidUnload
{
    self.imageView = nil;
    [super viewDidUnload];
}

- (void)dealloc
{
    [mImageView release];
    [super dealloc];
}
- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *oldDateString = @"";

    while(true)
    {
        NSDate *today = [NSDate date];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        [dateFormat setDateFormat:@"yyyy/MM/dd"];
        NSString *dateString = [dateFormat stringFromDate:today];
        NSLog(@"date: %@", dateString);
        if([dateString isEqualToString: oldDateString])
        {
        }
        else
        {
            NSAssert(self.imageView, @"self.imageView is nil. Check your IBOutlet   connections");
            UIImage* image = [UIImage imageNamed:dateString];
            NSAssert(image, @"image is nil. Check that you added the image to your bundle and that the filename above matches the name of you image.");
            self.imageView.backgroundColor = [UIColor whiteColor];
            self.imageView.clipsToBounds = YES;
            self.imageView.image = image;
            oldDateString = dateString;
        }
        [dateFormat release];
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

2 に答える 2

0

おそらくwhileループが原因です。アプリをブロックしています。

代わりに、次のようなタイマーを使用する必要があります。

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkDate) userInfo:nil repeats:YES];
[timer fire];

1秒ごとに新しい日付を確認したい場合(おそらく、より高い頻度で問題ないでしょう)checkDate、日付を確認し、必要に応じて画像を置き換える方法です。

于 2013-10-08T19:06:14.840 に答える