2017-02-07 1 views
-1

enter image description here、アプリ

dictの通知から来ているのクラッシュ、NSMutableArrayのにオブジェクトを追加するアプリケーションをクラッシュさNSMutableArrayのそれを辞書からのNSDataを取り出して追加。

このクラッシュは、必ずしも起こっているとは限りません。

+10

なぜあなたはbtter方法で文字列に変換するのNSDataをいけませんか? NsstataをNsstringにキャストするのは正しい方法ではありません! –

+0

@TejaNandamuriは、NSString * myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; ' – Ludovic

+0

@Mridulをイメージの代わりにここに追加して編集するだけです。 – vaibhav

答えて

0

キャストする必要がない配列にデータを直接取得することができます。

if(self.RFTagData != nil){ 
    self.RFTagData = [dict objectForKey:@"obj"]; 
} 

NSLog(@"array %@", RFTagData); 

これは、配列にすべてのデータをobjキーの下に追加します。

更新:

ユーザーrmaddy & danhが示唆されているようなので、ここではvalueForKeyobjectForKey方法とnil check on the arrayの使用に関するこの点の上の懸念を取る必要があります。

objectForKey:これはNSDictionaryメソッドです。 NSDictionaryはNSArray(コレクション)に似たコレクションクラスです。インデックスはNSArrayのようなものではなく、キーを使用して項目を区別します。キーとは、あなたが提供する任意の文字列です。 2つのオブジェクトが同じキーを持つことはできません(NSArray内の2つのオブジェクトが同じインデックスを持つことはできません)。

valueForKey:これはKVC方式です。これはANYクラスで動作します。 valueForKey:名前に文字列を使用してプロパティにアクセスできます。

ここでは両方とも指定されたキーに関連付けられた値を返します。ここではvalueForKeyメソッドを使用すると、回避策の解決方法が提供されます。しかし、このような場合には、objectForKeyを使用する方がより好ましい方法です。同一である配列内部null値をチェックする


ではなく、次にリテラル@"<null>"典型的ココアコレクションでnil Sを表すために使用されるNSNullオブジェクトのように見えます。

NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id value, NSDictionary *unused) { 
    return ![str isEqualToString:@"<null>"]; 
}]; 

NSArray *filteredAry = [self.RFTagData filteredArrayUsingPredicate:pred]; 

NSLog(@"array with non null vals %@", filteredAry); 
+0

なぜあなたは 'objectForKey:'の代わりに 'valueForKey:'を使用していますか? KVCを使用する明確な理由がない限り、KVCを使用しないでください。 – rmaddy

+0

また、OP *が配列に割り当てられていて、それに追加されていないことを示唆していますか?また、配列の無チェックは余計です。 – danh

+0

答えをありがとうが、ク​​ラッシュを解決していない –

0

たNSData *データ= [辞書のobjectForKey: "OBJ" @]あなたはNSArray'sfilteredArrayUsingPredicateメソッドを使用して、それらをフィルタリングすることができます。 [self.RFTagData addObject:data];

これを行うことでデータオブジェクトを直接追加することができます。文字列に変換する代わりに。

+0

OPは文字列に間違ってキャストされますが、それだけではクラッシュは発生しません。実際、キャストはまったく何もしません。 – danh

+0

答えに感謝しますが、クラッシュを解決していません –

0

オブジェクトを配列に追加するときに、NSDataをNSStringにキャストしないでください。NSDataをNSStringに変換してから配列に追加してください。 このNSDataをNSStringに使用し、NSStringを配列に追加する方が良い方法です。

NSData *data=[dict objectForKey:@"obj"]; 
NSString *strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
if(data != nil self.RFTagData != nil) 
{ 
    [self.RFTagData addObject:strData]; 
    ..... 
} 

Example for Converting Data into String

+0

これは、鋳造の主題に関する他の人と同様に、正しいですが、クラッシュの原因や救済策が示唆されていない限り、質問に対する答えはありません – danh

+0

答えをありがとうしかし、それはクラッシュを解決していません –

+0

データを文字列に変換して配列に追加したら、教えてください。コードを表示してください。私はあなたを手伝ってくれます。 – user3182143