(我认为我需要的是一个完成块,但如果我错了请纠正我.)
情况如下:
我正在使用Parse.com作为我的应用程序的后端.当用户注册帐户时,他们会在d出窗口中输入他们的姓名,公司和其他信息,然后单击“提交”.提交按钮链接到一个类方法(如下所示),该方法获取其PFUser对象和公司名称并创建一些数据库对象.函数完成后,使用委托解除d出窗口.
问题是我需要按特定顺序创建这些对象,因为它们依赖于彼此对象的存在.问题是,在单击提交后立即调用解除d出窗口的委托方法,因为它是堆栈中的下一个.
保存Parse对象时,会调用一个如下所示的方法:
(这是我希望写的,我认为可以解决我的问题)
[someParSEObject saveInBackgrounDWithBlock:^(BOol succeeded,NSError *error) { // Code here runs AFTER the method completes. // This also happens on another thread which // I'd like to implement as well.}];
那么,我需要弄清楚如何做以下事情:
(与块有关的一切都是完全错误的我确定)
SignUpVIEwController.mmyUserOrg *userOrg = [myUserOrg object]; // myUserOrg = Custom PFObject Subclass// My method that takes in a user object and a string,creates// the database objects in order.[userOrg registerNewUserOrgWithUser:(PFUser*) andCompanyname:(Nsstring*) companyname withBlock(somethingHere)block { if(error) { NSLog(@"Unable to create org!"); } else { NSLog(@"Created Org!"); [self.delegate dismissSignupVIEw];}
如果您需要其他信息或说明,请与我们联系.
先感谢您!
———编辑一个———-
好吧,以后几个相当大的时间单位,这就是我想出来的.整个实现可以更好地简化,并减少API调用,但会对此有所帮助.其他几个明显的问题也是第一步.
方法调用:
[testOrg registerNewUserOrgWithUser:currentUser creatingOrgContactWithname:@"MyBigHappy Corp." withBlock:^(BOol succeeded,NSError *error) { if (error) { NSLog(@"Not working"); } else { NSLog(@"Working!"); } }];
方法实施:
@implementation MYUserOrg@dynamic orgContact;@dynamic orgdisplayname;@dynamic members;@dynamic contacts;+ (Nsstring *)parseClassname { return @"MYUserOrg";}dispatch_queue_t NewUserOrgRegistrationQueue;-(voID)registerNewUserOrgWithUser:(MYUser*)user creatingOrgContactWithname:(Nsstring*) orgContactname withBlock:(MYBooleanResultBlock) block { NewUserOrgRegistrationQueue = dispatch_queue_create("com.myapp.initialOrgCreationQueue",NulL); dispatch_async(NewUserOrgRegistrationQueue,^{ NSMutableArray *errors = [[NSMutableArray alloc] init]; // Initial org save to generate objectID NSError *orgSaveError = nil; [self save:&orgSaveError]; if (orgSaveError) { [errors addobject:@"Initial Org save Failed"]; } // Create and Relate Org Contact NSError *saveOrgContactError = nil; MYontact *orgContact = [MYContact object]; [orgContact setContactType:MYContactTypeUserOrganization]; [orgContact setdisplayname:orgContactname]; [orgContact setParentOrg:self]; [orgContact save:&saveOrgContactError]; if (saveOrgContactError) { [errors addobject:@"Saving Org Contact Failed"]; } else { // If Org contact saved,set it; [self setorgContact:orgContact]; } // Create amd Relate User Contact NSError *saveUserContactError = nil; MYContact *userContact = [MYContact object]; [userContact setFirstname:user.firstname]; [userContact setLastname:user.lastname]; [userContact setContactType:MYcontactTypeUser]; [userContact setParentOrg:self]; [userContact save:&saveUserContactError]; if (saveUserContactError) { [errors addobject:@"Saving user contact Failed"]; } NSError *saveUserError = nil; [user setParentOrg:self]; [user setUserContact:userContact]; [user save:&saveUserError]; if (saveUserError) { [errors addobject:@"Saving User Failed"]; } // Return if block succeeded and any errors. NSError *error = nil; BOol succeeded; if (errors.count > 0) { NSDictionary *userInfo = @{@"error" : errors}; errors = [NSError errorWithDomain:@"MyAppErrorDomain" code:1 userInfo:userInfo]; succeeded = NO; } else { succeeded = YES; } block(succeeded,error); });}@end解决方法 当我想写一个块时,我总是使用它:
http://fuckingblocksyntax.com
或者不太亵渎的版本:
http://goshdarnblocksyntax.com/
对于Swift:
https://web.archive.org/web/20180527074325/http://fuckingswiftblocksyntax.com:80/
总结以上是内存溢出为你收集整理的ios – 如何编写Objective-C完成块全部内容,希望文章能够帮你解决ios – 如何编写Objective-C完成块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)