2010-09-03 10 views
21

Ne anlama geliyor? Cocoa obj-c'deki bir dosyada yineleme yapmaya çalışırken bu hatayı alıyorum.uyarı: Çerçevede olmayan bloklu USE_BLOCK_IN_FRAME değişkeni yaratılmaya çalışılıyor

Web'de hiçbir bilgi bulamıyorum.

Yardımdan memnun olurum. Teşekkürler.

DÜZENLEME

Ben Çekirdek veri önceden yüklemek için bu öğretici (link) takip ediyorum. Bir Cococa uygulaması oluşturmayı denedim ve bunu iPhone uygulamamdan da denedim. Çekirdek Veri için tüm kurulum kodumun iyi olduğunu düşünüyorum. Bu yöntem çağrıldığında, EXEC BAD ACCESS'i alıyorum.

- (void)loadInitialData 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    // name ZSTREET_1 ZSTREET_2 ZCITY ZZIP ZURL ZTEL latitude longitude 

    NSString *path = [[NSBundle mainBundle] pathForResource:@"placesdata" ofType:@"txt"]; 

    NSString *fileString = [NSString stringWithContentsOfFile:path]; // reads file into memory as an NSString 
    NSArray *lines = [fileString componentsSeparatedByString:@"\r"]; // each line, adjust character for line endings 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    for (NSString *line in lines) 

    { 
     NSLog(line); 

     NSString* string = [[NSString alloc] initWithUTF8String:line]; 
     NSArray *parts = [string componentsSeparatedByString:@"\t"]; 
     // value mapping 
     NSString *name = [parts objectAtIndex:0]; 
     NSString *street_1 = [parts objectAtIndex:1]; 
     NSString *street_2 = [parts objectAtIndex:2]; 
     NSString *city = [parts objectAtIndex:3]; 
     NSString *zip = [parts objectAtIndex:4]; 
     NSString *url = [parts objectAtIndex:5]; 

     NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; 
     [f setNumberStyle:NSNumberFormatterDecimalStyle]; 

     NSNumber *latitude = [f numberFromString:[parts objectAtIndex:6]]; 
     NSNumber *longitude = [f numberFromString:[parts objectAtIndex:7]]; 
     [f release]; 
     // splitting the parts to create the objects 

     Place *place = (Place *)[NSEntityDescription insertNewObjectForEntityForName:@"Place" inManagedObjectContext:context]; 
     Address *address = (Address *)[NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:context]; 
     Location *location = (Location *)[NSEntityDescription insertNewObjectForEntityForName:@"Location" inManagedObjectContext:context]; 

     // set attributes 
     [place setValue:name forKey:@"name"]; 
     [address setValue:street_1 forKey:@"street_1"]; 
     [address setValue:street_2 forKey:@"street_2"]; 
     [address setValue:city forKey:@"city"]; 
     [address setValue:zip forKey:"@zip"]; 
     [address setValue:url forKey:@"url"]; 
     [location setValue:latitude forKey:@"latitude"]; 
     [location setValue:longitude forKey:@"longitude"]; 

     // link the objects together 
     [place setValue:address forKey:@"address"]; 
     [place setValue:location forKeyPath:@"address.location"]; 

     [string release]; 
    } 
    NSLog(@"Done initial load"); 
    NSError *error; 
    if (![context save:&error]) { 
     NSLog(@"Error saving: %@", error); 
    } 
    [context release]; 
    [pool drain]; 


} 
+1

bazı kodlar gösterin. – zneak

+0

Cocoa veya Cocoa Touch? Soruyu [iphone] olarak etiketlediğinizi fark ettim. –

cevap

3

Bu hat yanlış bir derleyici uyarı üretir:

NSString* string = [[NSString alloc] initWithUTF8String:line]; 

UTF-8 kodlanmış Cı dize ve bir NSString amacı bekler initWithUTF8String: yöntemi.

Devam etmeden önce tüm derleyici uyarılarını düzeltmelisiniz! Ayrıca, parts dizisinin gerçekten beklediğiniz kadar nesne içerdiğini de kontrol etmelisiniz. Ayrıca, NSLog ile bir biçim dizesi kullanmanız gerekir, hatta satırınızda % karakter içeriyorsa orada da çökebilirsin.

NSString* aString = @""; 

for(int i=0; i<someLargeNumber; i++) { 
    aString = [aString stringByAppendingFormat:@"..."]; 
} 

Ben NSMutableString kullanarak geçiş kez sorun çözüldü: Bu konuda çok fazla yapıyordu çünkü

+0

apski: Ayrıca, zaten bir NSString nesnesine sahipseniz, bundan bir NSString nesnesi oluşturmanız gerekmez. –

+0

Herkese teşekkürler! Aslında problemi kodlayan hat kodlamasıydı. – apski

+38

Bu HIS sorunu için harika, ancak hata ne anlama geliyor ?!Yani, tamamen farklı kodda aynı hata mesajını aldım. Nasıl hata ayıklanır? (Derleyici uyarıları veya uyarıları çözümlemez ve deneyimli bir iOS geliştiricisiyim. Bunu daha önce hiç görmedim.) Teşekkürler! – Olie

4

gelecekte bu rastlar birisi için bu sorun var.

29

Tamamen farklı bir kodla bu sorunda çalışan diğer insanlar için, bu bir kırmızı ringa balığıdır.

Uyarı, hata ayıklayıcının kendisidir. Hata ayıklayıcı, sistemdeki her nesne için bilgi içeren bir yapı oluşturur. EXC_BAD_ACCESS sonra, bunlardan birini oluşturmaya çalıştı ama yapamadı. Bunun bir uyarı olduğunu ve bir hata olmadığını unutmayın, bu nedenle böyle durumlarda bile beklenebilir.

Her halükarda, bu konuyla ilgili ayrıntılar önemli değil. EXC_BAD_ACCESS'in kaynağını bulmalısın. Yaygın bir neden, serbest bırakıldıktan sonra bir nesneye erişmeye çalışıyor.

0

Oldukça düzenli olarak (bu iyi bir şey değil) EXC_BAD_ACCESS'a giriyorum, çünkü henüz ARC'yi etkinleştirmedik.

Zombie modus'ta Profiler'i kullanarak bu hataları izlemenin en iyi yolunu buluyorum. Bu mesaj size nasıl "zombi avı" gösterir:

How do I set up NSZombieEnabled in Xcode 4?

İlgili konular