मैं काफी ऑब्जेक्टिव-सी & लिए नया हूँ गतिशील success
ब्लॉक में अंदर की AFHTTPRequestOperationManager
से @property (strong, nonatomic) NSMutableArray *allCategories
का मूल्य बदलना होगा।
[self.allCategories addObject:tempObject];
लूप में पुनरावृत्ति करते समय allCategories
के मान को परिवर्तित नहीं करता है।
वैरिएबल को self.allCategories = [[NSMutableArray alloc]init];
में देखा गया है DidLoad में।ब्लॉक के अंदर से एक गैर-स्थानीय (वैश्विक) चर को कैसे संशोधित करें?
मैं भी
के रूप में एक अस्थायी चर बनाने __block NSMutableArray *tempCategories = [[NSMutableArray alloc]init];
AFHTTPRequestOperationManager
वस्तु शुरू करने से पहले की कोशिश की है। tempCategories
अपने मूल्य को भी बरकरार नहीं रखता है।
क्या हो रहा है यह पता नहीं लगा सकता है।
संपादित
असुविधा
viewDidLoad के लिए खेद है निम्नलिखित कोड self.allCategories = [[NSMutableArray alloc]init];
[self loadData];
है यहाँ कोड
-(NSMutableArray *)loadData
{
__block NSMutableArray *tempCategories = [[NSMutableArray alloc]init];
manager = [AFHTTPRequestOperationManager manager];
[manager GET:kAPICategoryList
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// downcast id to NSMutableDictionary
NSMutableDictionary *json = (NSMutableDictionary *)responseObject;
// check if dictionary is non nil has at least 1 element
if (json != nil && [json count] >= 1) {
// NSLog(@"json:\t%@", json);
// check json is non nil & has success message
if ([json objectForKey:kAPIKeyCategoryRoot] != nil) {
NSArray *arrCategoriesRoot = [json objectForKey:kAPIKeyCategoryRoot];
// check categories has some data
if (arrCategoriesRoot.count >= 1) {
for (int i = 0; i < arrCategoriesRoot.count; i++) {
SomeModel *pCategory;
NSDictionary *dctCategorySingle = [arrCategoriesRoot objectAtIndex:i];
// check category has sub category
if ([dctCategorySingle objectForKey:kAPIKeyCategorySubCategory] != nil) {
// create category with sub category
pCategory = [[SomeModel alloc]initWithSubCategorisedCategoryID:[dctCategorySingle objectForKey:kAPIKeyCategoryID]
name:[dctCategorySingle objectForKey:kAPIKeyCategoryName]
image:kIMGCategoryDefault
subCategory:[dctCategorySingle objectForKey:kAPIKeyCategorySubCategory]];
} else{
// create just a category
pCategory = [[SomeModel alloc]initWithCategoryID:[dctCategorySingle objectForKey:kAPIKeyCategoryID]
name:[dctCategorySingle objectForKey:kAPIKeyCategoryName]
image:kIMGCategoryDefault];
} // else just
[tempCategories addObject:pCategory];
[_allCategories addObject:pCategory];
} // for
NSLog(@"categories count %lu", [self.allCategories count]);
} // if count >= 1
}
else if ([json objectForKey:kAPIRespMsgCategoryFetchErrKey] != nil) {
[Utility showAlertWithTitle:kAPIRespMsgCategoryFetchErrKey
message:[json objectForKey:kAPIRespMsgCategoryFetchErrVal]
button:kMsgButtonOkayTtl];
}
} else {
// error in login => enable login
NSLog(@"%@", kMsgNetworkEmptyJSON);
}
}
// network error
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error %@", [error localizedDescription]);
}];
NSLog(@"tempCategories count %lu", [tempCategories count]);
return tempCategories;
}
है यहाँ उत्पादन प्रपत्र NSLog:
2015/03/19 18: 27: 17.845 MyProject [4011 : 121268] viewDidLoad
2015-03-19 18: 27: 18.133 मायप्रोजेक्ट [4011: 121268] temp श्रेणियां 0
2015-03-19 18: 27: 18.136 मायप्रोजेक्ट [4011: 121268] संख्याऑफ्रोइन्सइक्शन गणना 0
2015/03/19 18: 27: 18.137 MyProject [4011: 121,268] numberOfRowsInSection गिनती 0
2015/03/19 18: 27: 19.019 MyProject [4011: 121,268] श्रेणियों गिनती 20
जब loadData
खत्म allCategories नहीं है इसमें डेटा (शून्य)।
फोन आप कोड पोस्ट कृपया बना सकते हैं कि ऐसा करने के लिए? – jakedunc
आपने पर्याप्त जानकारी प्रदान नहीं की है। आपको क्या लगता है कि यह मूल्यों को नहीं बदल रहा है? उस कोड को पोस्ट करें जो आपके AFHTTPRequestOperationManager को कॉल करता है, साथ ही वह कोड जहां आप निष्कर्ष निकालते हैं कि addObject को कॉल कुछ भी नहीं कर रहा है। मेरा अनुमान है कि आप समझ नहीं पाते कि एसिंक पूरा करने के तरीके कैसे काम करते हैं, और उम्मीद करते हैं कि जैसे ही आप कॉल करते हैं, वैल्यू को बदला जा सकता है। –
सावधान रहें। आप यह सुनिश्चित नहीं कर सकते कि आपका पूरा करने वाला ब्लॉक किस धागे से वापस आ रहा है, जिसका अर्थ है कि आपको किसी भी तरह से अपनी सरणी थ्रेडसेफ तक पहुंचने की आवश्यकता हो सकती है। यह एक कारण है कि एसिंक एप्लिकेशन में वैश्विक चर क्यों आदर्श नहीं है। – damian