स्ट्रिंग से ObjectiveC Parse Integer


119

मैं एक सरणी से एक स्ट्रिंग (जिसमें एक पूर्णांक समाहित करता हूं) निकालने का प्रयास कर रहा हूं और फिर इसे फ़ंक्शन में एक इंट के रूप में उपयोग करता हूं। मैं एक intValue का उपयोग कर इसे इंट में बदलने की कोशिश कर रहा हूं।

यहाँ कोड मैं कोशिश कर रहा हूँ।

  NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];
  [_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

मुझे यह त्रुटि मिली:

'logIn :::' का तर्क 3 पासिंग पूर्णांक से कलाकारों के बिना सूचक बनाता है

क्या गलत है?


मुझे लगता है कि आपको (int)
रानो

2
कैसे लॉग इन किया जाता है ::: घोषित किया जाता है? विशेष रूप से यह किस प्रकार के 3 पैरामीटर की अपेक्षा करता है?
व्लादिमीर

यह सच है कि आपको इसकी आवश्यकता नहीं है, लेकिन यह उस त्रुटि को जन्म नहीं देगा जो वह देख रहा है।
चक

2
जिज्ञासा से बाहर, आप किस भाषा से आ रहे हैं? मैंने एसओ पर ऑब्जेक्टिव-सी सवाल पूछने वाले लोगों के बारे में देखा है, जहां उन्होंने मेथड कॉल किया है जो आपके loggedIn:::तरीके की तरह दिखता है , जो चीजों को करने का एक निश्चित रूप से अन-ऑब्जेक्टिव-सी तरीका है।
कुब्बी

1
नहीं, यह वास्तव में है loggedIn:::। बाकी की घोषणा केवल पैरामीटर नाम है, चयनकर्ता का हिस्सा नहीं है। मुहावरेदार, यह होना चाहिए - (void)loggedIn:(NSString *)tusername password:(NSString *)tpassword userID:(int)userId। और फिर आप इसे कहेंगे [_appDelegate userIsLoggedIn:usernameField.text password:passwordField.text userID:[[_returnedArguments objectAtIndex:2] intValue]];
चक

जवाबों:


267

मैं वास्तव में नहीं जानता कि इस प्रश्न के बारे में क्या कठिन था, लेकिन मैं इसे इस तरह से करने में कामयाब रहा:

[myStringContainingInt intValue];

यह ध्यान दिया जाना चाहिए कि आप भी कर सकते हैं:

myStringContainingInt.intValue;


2
बस हमारे लिए अन्य भाषाओं से आने वाले [myStringContainingInt intValue];myStringContainingInt.intValue;
नोब्स

5
क्या होता है जब अंदर की संख्या myStringContainingInt32 बिट्स के अंदर फिट होने के लिए बहुत बड़ी है - वास्तव में 31 बिट्स के बाद से यह हस्ताक्षरित है?
जोश हिनमैन

आपको इस मामले में longValue का उपयोग करना चाहिए
dulgan

1
longLongValue सटीक होने के लिए
लियो

5
यह ध्यान रखना महत्वपूर्ण है कि आप -[NSString intValue]ठीक उसी तरह का व्यवहार नहीं कर सकते हैं जिसकी आप अपेक्षा करते हैं। से डॉक्स : यह गुण है, तो स्ट्रिंग एक नंबर का एक मान्य दशमलव पाठ प्रतिनिधित्व के साथ शुरू नहीं होता है 0 है। उदाहरण के लिए, [@" 2 asdghjk" intValue]वापस आ जाएगी 2
zekel

8

आप इस तरह स्ट्रिंग को बदल सकते हैं [str intValue] या [str पूर्णांकValue]

पूर्णांकVueue रिसीवर के पाठ का NSInteger मान लौटाता है।

  • (NSInteger) पूर्णांक वैल्यू रिटर्न मान रिसीवर के पाठ का NSInteger मान, एक दशमलव प्रतिनिधित्व और स्ट्रिंग की शुरुआत में व्हाट्सएप को छोड़ देता है। यदि रिसीवर किसी संख्या के वैध दशमलव पाठ प्रतिनिधित्व के साथ शुरू नहीं करता है तो 0 देता है।

अधिक जानकारी के लिए यहाँ देखें


3
आप इसका जवाब एक ही चीज़ के लिए जवाब के टन के बाद पहले से ही यहाँ हैं?
क्रिश्चियन स्टीवर्ट

7
क्या आप मेरे साथ मजाक कर रहे हैं? क्या होगा यदि स्ट्रिंग "0" है? क्या यह एक त्रुटि है या एक सही पार्स है? दुख की बात है कि Apple अपवादों का पालन करता है, क्योंकि यह वही जगह है जहाँ आपको उनकी आवश्यकता है।
फ्राकहेड

1
NSArray *_returnedArguments = [serverOutput componentsSeparatedByString:@":"];

_returnedArgumentsएक सरणी है, NSStringsजिसमें UITextField textसंपत्ति की उम्मीद है। बदलने की जरूरत नहीं।

वक्य रचना त्रुटि:

[_appDelegate loggedIn:usernameField.text:passwordField.text:(int)[[_returnedArguments objectAtIndex:2] intValue]];

यदि आपके _appDelegate के पास कोई passwordFieldसंपत्ति है, तो आप निम्नलिखित का उपयोग करके पाठ सेट कर सकते हैं

[[_appDelegate passwordField] setText:[_returnedArguments objectAtIndex:2]];

मुझे लगता है कि आप अजीब तरीके से नाम और अजीब तरह से मंगलाचरण द्वारा फेंक दिया गया है। संपत्ति "एक स्ट्रिंग की उम्मीद" नहीं है (जो भी इसका मतलब है) - विधि passwordField.textका दूसरा तर्क है और तीसरा तर्क है। एक संपत्ति के लिए कुछ भी नहीं किया जा रहा है। loggedIn:::[[_returnedArguments objectAtIndex:2] intValue]
चक

मैं विधि को एक त्रुटि घोषित करता हूं .. यह
उल्लेख

0

मूल रूप से, तीसरा पैरामीटर loggedInपूर्णांक नहीं होना चाहिए, यह किसी प्रकार का ऑब्जेक्ट होना चाहिए, लेकिन हम निश्चित रूप से नहीं जान सकते क्योंकि आपने विधि कॉल में पैरामीटर का नाम नहीं दिया है। विधि हस्ताक्षर प्रदान करें ताकि हम सुनिश्चित कर सकें। शायद यह एक NSNumberया कुछ लेता है।


1
यह जरूरी नहीं कि एक वस्तु हो। वह गलती से विधि को int*वास्तव में लेने की घोषणा कर सकता था , जो मुझे बहुत संभावना लगती है, क्योंकि बहुत से लोग जो सी की मूल बातें सीखे बिना ऑब्जेक्टिव-सी लिखते हैं, मान लेते हैं कि पैरामीटर प्रकार सिर्फ उनके सिंटैक्स के हिस्से के रूप में सितारों को शामिल करते हैं।
चक

हाँ, यह गलत है। आप जो चाहते हैं वह सिर्फ int (या बेहतर अभी तक, NSInteger, जो एक ही बात है) है। ऑब्जेक्टिव-सी ऑब्जेक्ट्स से पहले आपको केवल * सिग्नल्स की जरूरत है, और एक इंट कोई ऑब्जेक्ट नहीं है, यह एक प्रिमिटिव डेटा टाइप है। इसलिए विधि हस्ताक्षर को सिर्फ (int) या (NSInteger) में बदलें, और इसे ठीक करना चाहिए।
जोर्ज इज़राइल Peña

0

ध्यान रखें कि अंतर्राष्ट्रीय उपयोगकर्ता एक दशमलव विभाजक का उपयोग कर सकते हैं, इसके अलावा ऐसे .मामले जिनमें मान मिलाया जा सकता है या intValueस्ट्रिंग पर उपयोग करते समय शून्य हो सकता है ।

उदाहरण के लिए, यूके 1.23में लिखा गया है 1,23, इसलिए 1.777उपयोगकर्ता द्वारा संख्या को इनपुट किया जाएगा 1,777, जो कि, के रूप में .intValue, (छोटा 1777नहीं किया जाएगा 1)।


मैंने एक मैक्रो बनाया है जो एक स्थानीय तर्क पर आधारित NSNumber के लिए इनपुट टेक्स्ट को परिवर्तित करेगा जो कि nil हो सकता है (यदि nil यह डिवाइस करंट लोकेल का उपयोग करता है)।

#define stringToNumber(__string, __nullable_locale) (\
(^NSNumber *(void){\
NSLocale *__locale = __nullable_locale;\
if (!__locale) {\
__locale = [NSLocale currentLocale];\
}\
NSString *__string_copy = [__string stringByReplacingOccurrencesOfString:__locale.groupingSeparator withString:@""];\
__string_copy = [__string_copy stringByReplacingOccurrencesOfString:__locale.decimalSeparator withString:@"."];\
return @([__string_copy doubleValue]);\
})()\
)

-1

अगर मैं आपको सही ढंग से समझ गया, तो आपको अपने NSStringको बदलने की आवश्यकता है int? कोड की इस शांति का प्रयास करें:

NSString *stringWithNumberInside = [_returnedArguments objectAtIndex:2];
int number;
sscanf([stringWithNumberInside UTF8String], "%x", &flags);

4
NSString में एक intValueविधि है। developer.apple.com/iphone/library/documentation/cocoa/…
चक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.