0

シミュレーター 6.1 で正常に動作し、iOS6.1 の iPhone5 および iPad3 で正常に動作するアプリがありますが、iPhone4S で実行すると、Exc Bad Access を使用してこの方法でクラッシュします。

-(void)parsePlistIntoCD{
    self.managedObjectContext = [[SDCoreDataController sharedInstance] backgroundManagedObjectContext];
    // 3: Now put the plistDictionary into CD...create get ManagedObjectContext
    NSManagedObjectContext *context = self.managedObjectContext;
    NSError *error;

    //Create Request & set Entity for request
    NSFetchRequest *holidayRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *topicEntityDescription = [NSEntityDescription entityForName:@"Holiday" inManagedObjectContext:context];
    [holidayRequest setEntity:topicEntityDescription];

    //Create new NSManagedObject
    //Holiday *holidayObjectToSeed = nil;
    Holiday *newHoliday = nil;
    //Execute fetch just to make sure?
    NSArray *holidayFetchedArray = [context executeFetchRequest:holidayRequest error:&error];
    **if (error) NSLog(@"Error encountered in executing topic fetch request: %@", error); // if I comment this line out it reaches as far as the next bold line**

    // No holidays in database so we proceed to populate the database
    if ([holidayFetchedArray count] == 0) {
        //Get path to plist file
        NSString *holidaysPath = [[NSBundle mainBundle] pathForResource:@"PreloadedFarsiman" ofType:@"plist"];
        //Put data into an array (with dictionaries in it)
        NSArray *holidayDataArray = [[NSArray alloc] initWithContentsOfFile:holidaysPath];
        **NSLog(@"holidayDataArray is %@", holidayDataArray);**
        //Get number of items in that array
        int numberOfTopics = [holidayDataArray count];
        //Loop thru array items...
        for (int i = 0; i<numberOfTopics; i++) {
            //get each dict at each node
            NSDictionary *holidayDataDictionary = [holidayDataArray objectAtIndex:i];
            //Insert new object
            newHoliday = [NSEntityDescription insertNewObjectForEntityForName:@"Holiday" inManagedObjectContext:context];
            //Parse all keys in each dict object
            [newHoliday setValuesForKeysWithDictionary:holidayDataDictionary];
            //Save and or log error
            [context save:&error];
            if (error) NSLog(@"Error encountered in saving topic entity, %d, %@, Hint: check that the structure of the pList matches Core Data: %@",i, newHoliday, error);
        };
    }

    //set bool that specifies the coredata has been populated from plist already
    NSString *bundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];
    NSString *appFirstStartOfVersionKey = [NSString stringWithFormat:@"first_start_%@", bundleVersion];

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setObject:@(YES) forKey:appFirstStartOfVersionKey];
    [prefs synchronize];
}

なぜ4Sだけ?コンソール ログは表示されず、上記でトラバースされた最後の既知のメソッドが表示されます。ここに写真があります:

ここに画像の説明を入力

上記のように、その NSLog 行のコメントを外すと、図に示すように、アレイのログ記録まで到達します。そのままにしておくと、その行で止まります。

4

2 に答える 2

0

これは、クラッシュが発生したコード行を特定していない暗い b/c への刺し傷です。ブレークポイントを設定してから、クラッシュするまでステップスルーすることをお勧めします。以下の説明で問題が解決しない場合は、投稿を編集して、クラッシュが発生した場所に関する情報を追加してください。

ここで確認することがあります。この線:

[newHoliday setValuesForKeysWithDictionary:holidayDataDictionary]

のキーのいずれかがクラスholidayDataDictionaryのインスタンスに対して有効でない場合、クラッシュする可能性があります。Holiday

なぜiPhone 4Sでしかクラッシュしないのかというあなたの質問に関しては、それを説明するのに十分なデータがまだありません. テストとコア データの移行の方法によっては (あるとしても)、そのデバイスでモデルの不整合が発生する可能性がありますが、投稿したスクリーン ショットにはその方向性を示すものは何も表示されません。アプリのアンインストール/再インストールを試みて、クラッシュがまだ iPhone 4S のみであるかどうかを確認します。

于 2013-04-18T01:57:52.997 に答える