স্ট্রিং থেকে অবজেক্টসি পার্স পূর্ণসংখ্যা


119

আমি একটি অ্যারের থেকে একটি স্ট্রিং (যার মধ্যে একটি পূর্ণসংখ্যা রয়েছে) বের করার চেষ্টা করছি এবং তারপরে এটি কোনও ফাংশনে ইনট হিসাবে ব্যবহার করব। আমি এটি intValue ব্যবহার করে কোন int এ রূপান্তর করার চেষ্টা করছি।

আমি চেষ্টা করছি কোড এখানে।

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

আমি এই ত্রুটি পেয়েছি:

'লগইনডাইন :::' এর 3 আর্গুমেন্টটি পাসওয়ার্ড ছাড়াই পূর্ণসংখ্যা থেকে পয়েন্টার তৈরি করে

কোনো সমস্যা?


আমি আপনি প্রয়োজন নেই (int)অংশ
Rano

2
কিভাবে লগইন ::: ঘোষিত হয়? বিশেষত এটি কোন তৃতীয় প্যারামিটারের প্রত্যাশা করে?
ভ্লাদিমির

এটি সত্য যে আপনার এটির দরকার নেই, তবে এটি ত্রুটির দিকে নিয়ে যাবে না।
চক

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 টি বিট থাকে?
জোশ হিন্মান

আপনার এই ক্ষেত্রে দীর্ঘমেয়াদি ব্যবহার করা উচিত
দুলগান

1
লংলংভ্যালু সুনির্দিষ্ট হতে হবে
লিও

5
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে আপনি -[NSString intValue]যেমনটি প্রত্যাশা করেন ঠিক তেমন আচরণ নাও করতে পারেন। দস্তাবেজগুলি থেকে : সংখ্যার বৈধ দশমিক পাঠ্য উপস্থাপনার মাধ্যমে স্ট্রিংটি শুরু না হলে এই সম্পত্তি 0 হয়। উদাহরণস্বরূপ, [@" 2 asdghjk" intValue]ফিরে আসবে 2
জেকেল 2'15

8

আপনি কেবল স্ট্রিংকে [str intValue] বা [str পূর্ণসংখ্যা] এর মত রূপান্তর করতে পারেন

পূর্ণসংখ্যার প্রাপকের পাঠ্যের NSInteger মান প্রদান করে।

  • (NSInteger) পূর্ণসংখ্যার রিটার্নের মান রিসিভারের পাঠ্যের NSInteger মান, স্ট্রিংয়ের শুরুতে দশমিক প্রতিনিধিত্ব এবং হোয়াইটস্পেস এড়িয়ে যাওয়া অনুমান করে। যদি কোনও সংখ্যার বৈধ দশমিক পাঠ উপস্থাপনার সাথে রিসিভার শুরু না হয় তবে 0 প্রদান করে।

আরও তথ্যের জন্য এখানে উল্লেখ করুন


3
একই জিনিসটির জন্য প্রচুর উত্তর ইতিমধ্যে এখানে আসার পরে আপনি এটির উত্তর দিন?
খ্রিস্টান স্টুয়ার্ট

7
আপনি কি আমার সাথে মজা করছেন? স্ট্রিং "0" হলে কী হবে? এটি একটি ত্রুটি বা সঠিক পার্স? দুঃখের বিষয় যে অ্যাপল ব্যতিক্রমগুলি ঘৃণা করে, যেহেতু এটি আপনার প্রয়োজনীয় জায়গা ঠিক।
ফ্রেইকহেড

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 কোনও অবজেক্ট নয়, এটি একটি আদিম ডাটা টাইপ। সুতরাং পদ্ধতির স্বাক্ষরটি কেবলমাত্র (ইনট) বা (এনএসআইঞ্জিদার) এ পরিবর্তন করুন এবং এটি ঠিক করা উচিত।
জোর্জে ইস্রায়েল পেঁয়া

0

মনে রাখবেন যে আন্তর্জাতিক ব্যবহারকারীরা একটি দশমিক বিভাজক ব্যবহার .করতে পারেন তবে intValueস্ট্রিং ব্যবহারের ক্ষেত্রে মানগুলি মিশ্রিত হতে পারে বা কেবল শূন্য হতে পারে ।

উদাহরণস্বরূপ, ইউকেতে 1.23লিখিত 1,23, সুতরাং সংখ্যাটি 1.777ব্যবহারকারী হিসাবে ইনপুট হবে 1,777, যা হিসাবে .intValue, (ছাঁটা হবে 1777না 1)।


আমি একটি ম্যাক্রো তৈরি করেছি যা কোনও লোকাল আর্গুমেন্টের ভিত্তিতে ইনপুট পাঠ্যটিকে NSNumber এ রূপান্তর করবে যা শূন্য হতে পারে (যদি এটি ডিভাইসটির বর্তমান লোকাল ব্যবহার করে)।

#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
এনএসএসস্ট্রিংয়ের একটি intValueপদ্ধতি আছে। বিকাশকারী.এপল.
চক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.