私が思うに単純なものが欠けていますが、これを解決せずに何日もそれを続けています。今のところそれを解決するためだけに「回避策」を作成し始めましたが、それでもこれを「正しい」方法で解決したいと考えています。助言がありますか?ありがとう!
.
問題:
クラス Adealer が欠落しているようです (エラー "-[Adealer objectAtIndex:]: 認識されないセレクターがインスタンス 0x8c5f8b0 に送信されました") が表示されますが、この "detailsVC" に Adealer.h をインポートしました。しかし、それは単にプロパティの名前を間違っているという単純なエラーではありません( objectForKey:@"CustName"
「custname」などの代わりに - これを何度もテストしました)。
また、Adealer のようなクラスのない同様の「listVC」もあり、同じ方法で同じ「detailsVC」にデータを転送し、問題なく動作します。次に、次のような呼び出しでデータを取得します。
self.labelRestName.text = [restDetails objectForKey:@"CustName"];
概要:
データを作成してリストを表示するtableViewController「listVC」を取得し、次に詳細を表示するViewController「detailsVC」を取得しました。データ (「listVC」で選択された行オブジェクトは、seque および「destVC.restGPSTransfer」(NSDictionary) を介して転送されます。データは「detailsVC」で問題なく到着し、端末では次のようになります。
dealerName = Uppsala Centrum Test
dealerAdressStreet = Dragarbrunnsgatan 55
dealerAdressZip = 75320
dealerAdressCity = Uppsala
dealerLongitude = 17.63893
dealerLatitude = 59.85856
dealerDistance2 = 8586398.000000
etc
.
次のデータ:
「リストVC」
1) 最初に、AFNetworking json オブジェクトを介して Web から NSMutableArray "restFeed" にデータをフェッチします。
2) 次に、このループ内で NSMutableArray に独自のデータを作成し、NSMutableArray "updatedDealers" - わかりました。
NSMutableArray *updatedDealers = [[NSMutableArray alloc]init];
while (i+1 < [_restFeed count]) {
i++;
// Get dealer position function here
// Get distance function here
// Then create my own data here (also #imported Adealer to "listVC";
Adealer *theDealer = [[Adealer alloc]init];
theDealer.dealerName = [[_restFeed objectAtIndex:i]objectForKey:@"CustName"];
theDealer.dealerLongitude = [[_restFeed objectAtIndex:i]objectForKey:@"long"];
theDealer.dealerLatitude = [[_restFeed objectAtIndex:i]objectForKey:@"lat"];
theDealer.dealerDistance2 = theDistance;
// etc...
// Check if data ok
NSLog(@"theDealer = %@",[theDealer description]);
// Don't add dealer object without positiondata to the new array
if (![theDealer.dealerLatitude isEqualToString:@""]) {
[updatedDealers addObject:theDealer];
}
3) 次に、NSSortdescriptor を使用して NSMutableArray "updatedDealers" 内のディーラーを距離順にソートし、最後にこれを使用して新しい NSMutableArray "restFeed" を作成します。( @synthesize dealerFeed = _dealerFeed;
「listVC」で「」も実行) - わかりました。
_dealerFeed = [NSMutableArray arrayWithArray:sortedContestArray];
4) この配列をいくつかの tableViewCells に入力すると、問題なく動作します。
cell.cellDealerName.text = [NSString stringWithFormat:@"%@",[[_dealerFeed objectAtIndex:indexPath.row]dealerName]];
5) 関数 didSelectRowAtIndexPath で、選択されたオブジェクトを「detailsVC」の NSDictionary 「restGPSTransfer」で転送します。
destVC.restGPSTransfer = [_dealerFeed objectAtIndex:myIndexPath.row];
"detailsVC":
6) データは問題なく転送されているようですが (この投稿の上部を参照)、データを呼び出そうとすると、
self.labelRestName.text = [restGPSTransfer objectForKey:@"dealerName"];
次のエラーが表示され、アプリがクラッシュします。
さらにいくつかのテストが行われました...
NSDictionary「restGPSTransfer」の構造+キーとプロパティを確認しようとしましたが、説明を使用してもこれまでのところしかわかりませんでした。私の問題は解決していませんが、「認識されないセレクター」というエラーが引き続き表示されます。辞書の中の辞書か何かになったのでしょうか?
プロパティが実際に存在するかどうかを確認するために、この簡単な if-test を作成しました。しかし、すべてのプロパティを「手動で」チェックする必要があります。穴 NSDictionary / NSArray をチェックするよりスマートな方法はおそらくありますか?
if ([restGPSTransfer objectForKey:@"dealerName"]) {
NSLog(@"= YES! key exists.");
} else {
NSLog(@"= Nope! key don't exists");
}
これについて助けてくれてありがとう:-)
.
Adealer クラス ファイルを更新します。
Adealer.h
#import <Foundation/Foundation.h>
@interface Adealer : NSObject
@property (nonatomic, retain) NSString * dealerName;
@property (nonatomic, retain) NSString * dealerAdressCity;
@property (nonatomic, retain) NSString * dealerAdressStreet;
@property (nonatomic, retain) NSString * dealerAdressZip;
@property (nonatomic, retain) NSNumber * dealerID;
@property (nonatomic, retain) NSString * dealerImages;
@property (nonatomic, retain) NSString * dealerLogo;
@property (nonatomic, retain) NSString * dealerMail;
@property (nonatomic, retain) NSString * dealerProducts;
@property (nonatomic, retain) NSString * dealerTel;
@property (nonatomic, retain) NSString * dealerText;
@property (nonatomic, retain) NSString * dealerWeb;
@property (nonatomic, retain) NSString * dealerLongitude;
@property (nonatomic, retain) NSString * dealerLatitude;
@property (nonatomic, retain) NSString *dealerDistance;
@property float dealerDistance2;
@end
アディーラー.m
#import "Adealer.h"
@implementation Adealer
@synthesize dealerAdressCity, dealerAdressStreet, dealerAdressZip, dealerID, dealerImages, dealerLogo;
@synthesize dealerMail, dealerName, dealerProducts, dealerTel, dealerText, dealerWeb;
@synthesize dealerLongitude, dealerLatitude, dealerDistance,dealerDistance2;
- (NSString *)description {
// Added extension of description
NSMutableString *string = [NSMutableString string];
[string appendString:@"\ntheDealer object and it's properties:\n"];
[string appendFormat:@"dealerName = %@\n", dealerName];
[string appendFormat:@"dealerAdressStreet = %@\n", dealerAdressStreet];
[string appendFormat:@"dealerAdressZip = %@\n", dealerAdressZip];
[string appendFormat:@"dealerAdressCity = %@\n", dealerAdressCity];
[string appendFormat:@"dealerTel = %@\n", dealerTel];
[string appendFormat:@"dealerMail = %@\n", dealerMail];
[string appendFormat:@"dealerWeb = %@\n", dealerWeb];
[string appendFormat:@"dealerLogo = %@\n", dealerLogo];
[string appendFormat:@"dealerImages = %@\n", dealerImages];
[string appendFormat:@"dealerText = %@\n", dealerText];
[string appendFormat:@"dealerProducts = %@\n", dealerProducts];
[string appendFormat:@"dealerLongitude = %@\n", dealerLongitude];
[string appendFormat:@"dealerLatitude = %@\n", dealerLatitude];
[string appendFormat:@"dealerDistance = %@\n", dealerDistance];
[string appendFormat:@"dealerDistance2 = %f\n\n", dealerDistance2];
return string;
}
@end