1

xcodeで書いているタイマープログラムの配列を設定しようとしています。値は秒単位であり、私が望むのは、その秒数でタイマーを開始するボタンをインターフェースビルダーに持つことです。これは、.h ヘッダー ファイルで時刻を提供するために宣言しようとしている構造体です。@collegeTimes.constructive または同様のもので呼び出すことができる、2 つの配列を含む単なる配列です。

前もって感謝します!

- (NSDictionary *)debateTimes;
 id debateTimes = [[NSDictionary alloc] initWithObjectsAndKeys:
 [NSDictionary dictionaryWithObjectsAndKeys:
   @"540", @"constructive",
   @"360", @"rebuttal",
   @"180", @"cx",
   @"600", @"prep",
     nil], @"collegeTimes",
 [NSDictionary dictionaryWithObjectsAndKeys:
   @"480", @"constructive",
   @"300", @"rebuttal",
   @"180", @"cx",
   @"480", @"prep",
     nil], @"hsTimes",
                   nil]; \\error is called here.
4

2 に答える 2

4

これは、.h ヘッダー ファイルで時刻を提供するために宣言しようとしている構造体です。

これが問題です。関数の外で定数NSDictionaryオブジェクト (または他のほとんどのオブジェクト) を作成することはできません。NSやりたいことを行う1つの方法は次のとおりです。

サムシング.h

@interface SomeThing : NSObject
{
    ...
}
+ (NSDictionary *)debateTimes;
@end

サムシング.m

static NSDictionary * staticDebateTimes = nil;
@implementation SomeThing
...
+ (NSDictionary *)debateTimes
{
    if (staticDebateTimes == nil)
    {
        staticDebateTimes = [[NSDictionary alloc] initWithObjectsAndKeys:
          [NSDictionary dictionaryWithObjects:...
    }
    return staticDebateTimes;
}
@end

このコードは、次のように外部で使用されます。

NSDictionary * debateTimes = [SomeThing debateTimes];
于 2011-01-13T21:38:35.767 に答える
2

関数外の変数に object-c オブジェクトを代入することはできません。変数が関数の外で割り当てられると、その値は実行可能ファイルの一部になります。オブジェクトへのポインタの値は実行時までわからないため、オブジェクトが作成されるまでオブジェクトを割り当てることはできません。(定数 NSString は実行可能ファイルの一部でもあるため、例外です)

このような構造体を格納する最良の方法は、c 構造体の配列を使用することです。

typedef struct {
    char *name;

    NSTimeInterval constructive;
    NSTimeInterval rebuttal;
    NSTimeInterval cx;
    NSTimeInterval prep;
} DebateTime;
DebateTime[2] = {{"collegeTimes", 540, 360, 180, 600},
                 {"hsTimes", 480, 300, 180, 480}};

必要に応じて、名前と時間間隔を定数文字列に変更することもできます。

于 2011-01-13T21:39:46.337 に答える