Je viens de sauter dans Objective-C et je suis resté bloqué assez tôt. Je posterai le code avec ma question mais pour le garder lisible je me débarrasserai de la merde, laissez-moi savoir si vous voulez plus de code posté!Impossible d'accéder aux propriétés d'un objet dans l'objectif-c
J'ai créé un nouvel objet appelé 'Phrase' (sous-classé à partir de NSObject), et je lis des éléments de JSON dans ces objets 'Phrase' et les ajoute à un tableau. Voici le premier lot de code:
Exemple JSON:
{
"phrases": [
{
"title": "Title of my Phrase",
"definition" : "A way to look at some words",
"location" : "Irish Proverb"
}
]
}
Script Je le lis avec:
- (void)viewDidLoad {
[super viewDidLoad];
self.phraseDictionary = [[NSMutableArray alloc] initWithObjects:nil];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"phrase" ofType:@"json"];
NSString *myRawJSON = [[NSString alloc] initWithContentsOfFile:filePath];
NSData *jsonData = [myRawJSON dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSDictionary *entries = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:nil];
for (id key in entries) {
NSObject *phrases = [entries objectForKey:key];
for (id phrase in phrases) {
Phrase *pushArrayToPhrase = [[Phrase alloc] initWithText:[phrase objectForKey:@"title"] definition:[phrase objectForKey:@"definition"] location:[phrase objectForKey:@"location"]];
[self.phraseDictionary addObject:pushArrayToPhrase];
}
}
}
fichier Phrase m:
#import "Phrase.h"
@implementation Phrase
@synthesize title;
@synthesize definition;
@synthesize location;
- (id)init {
self = [super init];
if (self != nil) {
title = @"";
definition = @"";
location = @"";
}
return self;
}
- (id)initWithTitle:(NSString *)tit definition:(NSString *)def location:(NSString *)loc {
self = [super init];
if (self != nil) {
title = tit;
definition = def;
location = loc;
}
return self;
}
@end
De là, je boucle à travers les objets et les ajouter à une liste dans mon SPLITVIEW:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
// Dequeue or create a cell of the appropriate type.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
}
Phrase *cellPhrase = [self.phraseDictionary objectAtIndex:indexPath.row];
cell.textLabel.text = cellPhrase.title;
return cell;
}
Mais lorsque je clique sur un élément, et demande une phrase sur la base indexPath.row de celui cliqué, je ne peut jamais accéder à la propriété utilisée dans le fichier cell.textLabel.text. Toute tentative d'accès à une propriété à partir de l'objet Phrase à partir de maintenant permet de quitter le simulateur. J'espère que c'est facile à suivre, faites le moi savoir si ce n'est pas le cas et je réessayerai!
Des infos pour lesquelles il existe? Avez-vous vérifié les journaux? –
Comme je viens de le mentionner ci-dessous, j'ai reçu le message "Program received signal:" EXC_BAD_ACCESS "." quand j'ai activé le débogage. J'ai vu ce lien http://stackoverflow.com/questions/327082/exc-bad-access-signal-received mais je ne pouvais pas le relier à ma situation ... –