0

私の方法の 1 つで、 をフェッチして解析し、それをjsonArray と呼ばれるJSON内に配置しました。次に、その jsonArray の内容を、呼び出されたcopydJsonArrayにコピーして、他のメソッドで使用できるようにしました。問題は、他の方法からコンソールにその内容を記録するたびにcopyedJsonArrayがクラッシュすることですが、.NSArray-(void)method1NSMutableArray-(void)method2-(void)method1

どうすればこれを修正できますか?

私のヘッダーファイルでは:

@interface MainViewController : UIViewController

@property (nonatomic, retain) NSMutableArray *copiedJsonArray;

私の実装ファイルでは:

@synthesize copiedJsonArray;

- (void)viewDidLoad
{
    [self method1];
}

- (void)method1
{
    NSString *urlString = [NSString stringWithFormat:THE_URL]; 
    NSURL *url = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *jsonString = [[[NSString alloc] initWithData:data
                                              encoding:NSUTF8StringEncoding] autorelease];
    NSDictionary *jsonDictonary = [jsonString JSONValue];
    NSArray *jsonArray = [jsonDictonary valueForKeyPath:@"QUERY.DATA"];

    self.copiedJsonArray = [[NSMutableArray alloc] initWithArray:jsonArray copyItems:YES];

    NSLog(@"Copied JSON Array in Method 1: %@", self.copiedJsonArray);

    [self method2];
}

- (void)method2
{
    NSLog(@"Copied JSON Array in Method 2: %@", self.copiedJsonArray);
}

私もこれをやろうとしましたが、同じエラーが発生します:

copiedJsonArray = [jsonArray mutableCopy];

私も実装しようとしNSCopyましたが、失敗しました:

@interface MainViewController : UIViewController <NSCopying>
{
    NSMutableArray *copiedJsonArray;
}

これを行っているのは、ユーザーが my UISegmentedControl.

4

1 に答える 1

0

method1 の前に method2 を呼び出すと、copyedJasonArray が作成されていないためクラッシュします。メソッド内でインスタンス変数を作成しないでください (それらが呼び出されたかどうかがわからないため)。たとえば、viewDidLoadでviewControllerを作成するときにそれを行う必要があります。

プロパティを使用します:

@interface
@property (retain) NSMutableArray* copiedJsonArray;
@end

それからどちらか

@synthesize copiedJsonArray = _copiedJsonArray

またはその行を省略します (4.5 ではコンパイラが自動的に挿入します)。

self.copiedJsonArrayまたはとしてアクセスします_copiedJSONArray
getter、setter、init、および dealloc 以外では、self.フォームを使用すると安全です。

_copiedJsonArrayセッターで遅延して作成することもできます。

- (NSMutableArray*) copiedJsonArray
{
   if (!_copiedJasonArray)
         _copiedJsonArray = [NSMutableArray alloc] init;
   return _copiedJasonArray;
}
于 2013-01-13T12:16:29.193 に答える