2011-05-18 12 views
6

कैसे मैं nsdata जोड़ सकता हूं, मैं सॉकेट पर भेजने के लिए पहले संदेश पर लेंस डेटा जोड़ दूंगा, लेकिन मैं इस तरह के कोड का उपयोग करता हूं लेकिन रनिंग पर त्रुटि करता हूं।कैसे nsdata

int lendata = [message length]; 
NSData *firstdata = [NSData dataWithBytes: &lendata length: sizeof(lendata)]; 
NSData *mdata = [message dataUsingEncoding:NSUTF8StringEncoding]; 
NSMutableData *seconddata = [NSData dataWithData:mdata]; 
[firstdata appendData:secondata]; 

कृपया बताएं कि आपकी सहायता के लिए धन्यवाद है या नहीं।

+0

के लिए कोड ऊपर जाँच क्या त्रुटि? –

+0

@ हेनरिक पी। हेसल: सबसे अधिक संभावना है कि 'NSData'' appendData: 'का जवाब नहीं दे रहा है। – DarkDust

उत्तर

17

मेरी क्रिस्टल बॉल में Glancing:

  1. आप एक NSMutableData उदाहरण के रूप में seconddata की घोषणा कर रहे हैं, लेकिन फिर आप इसे [NSData dataWithData:][NSMutableData dataWithData: के बजाय] का उपयोग कर प्रारंभ, तो seconddata नहीं परिवर्तनशील अंत में हो सकता है और आप करेंगे इसमें शामिल नहीं हो सकता

  2. आप firstdata में शामिल करने की कोशिश कर रहे हैं, जो कि उत्परिवर्तनीय नहीं है।

समाधान: firstdata परिवर्तनशील बनाने:

NSMutableData *firstdata = [NSMutableData dataWithBytes: &lendata 
               length: sizeof(lendata)]; 
[firstData appendData:[message dataUsingEncoding:NSUTF8StringEncoding]]; 

तो आप सुरक्षित रूप से mdata और seconddata वे अब कोई आवश्यकता नहीं कर रहे हैं के रूप में छोड़ सकते हैं।

+0

धन्यवाद तामा यह काम है, लेकिन मुझे अभी भी समस्या है, मेरा एनएसस्ट्रिंग डेटा 42 वर्ण लेंस है, मैं पहले डेटा पर हेक्सा ए 2 (42 डीसी) डेटा जोड़ना चाहता हूं लेकिन आउटपुट 42 00 तक एक्स 00 एक्स 00 एक्सएक्स एक्सएक्स एक्सएक्स है, एक्सएक्स है सही है लेकिन ए 2 00 00 00 क्यों है? जो मेरा कोड गलत है? – user752846

+1

इंटीजर आपके सिस्टम पर चार बाइट्स में संग्रहीत हैं, इसलिए '' [एनएसएमयूटेबल डेटा डेटाविथबाइट्स: और लैंडटा लंबाई: आकार (लेंडाटा)] '' चार बाइट स्टोर करता है। यह उम्मीद है। यदि आप केवल एक बाइट स्टोर करना चाहते हैं, तो '' lendata'' के प्रकार के रूप में 'unsigned char'' का उपयोग करें, और सुनिश्चित करें कि आपकी स्ट्रिंग 255 वर्णों से अधिक नहीं है। –

+1

वैसे, यदि आपके संदेश में ऐसे वर्ण हैं जो यूटीएफ -8 एन्कोडिंग में एक से अधिक बाइट द्वारा एन्कोड किए गए हैं तो आपको परेशानी होगी। मैं पहले संदेश को '' NSData'' (उदाहरण के लिए, '' NSData * msgdata = [message dataUsingEncoding: NSUTF8StringEncoding] '') में परिवर्तित कर दूंगा, और फिर स्ट्रिंग की लंबाई के बजाय '' msgdata'' की लंबाई का उपयोग करें । –

6
NSMutableData *first_data = [NSMutableData dataWithContentsOfURL:self.firstURL]; 
NSMutableData *second_data = [NSMutableData dataWithContentsOfURL:self.secondURL]; 
[first_data appendData:second_data]; 
[first_data writeToURL:url atomically:YES]; 

संलग्न

+0

कृपया अपना उत्तर संपादित करें और अपना कोड प्रारूपित करें: बस इसे चुनें और फिर इसे चार रिक्त स्थान के साथ इंडेंट करने के लिए '{}' बटन दबाएं (यह कोड के लिए हमारा मार्कअप है " ")। – DarkDust

संबंधित मुद्दे