小编Kre*_*erg的帖子

从UITableViewCell 3D Touch Peek和Pop如何将数据移交给其他UIViewController?

我的应用程序在Core Data对象中存储不同的属性.它们都显示在UITableView中,如果单击一个单元格,则会显示DetailView.通常的东西,如Master-Detail-XCode-Template.

现在我想用peek和pop实现3D Touch.就像在Mail应用程序中一样,3D触摸一个单元格,进行预览,按下更深处,弹出细节.

到目前为止,我已经完成了这项工作,但我无法弄清楚如何传递相应的数据

- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
Run Code Online (Sandbox Code Playgroud)

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
Run Code Online (Sandbox Code Playgroud)

到另一个DetailViewController.

如果您只是单击单元格(无3D触摸),我会将数据移交给

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    [[segue destinationViewController] setDetailItem:object];
Run Code Online (Sandbox Code Playgroud)

我正在使用

id detailItem
Run Code Online (Sandbox Code Playgroud)

在每个ViewController中我都设置了相应的对象.

所以我尝试得到类似的东西,所以在我的DetailViewController中,我的"detailItem"需要来自所选(3D触摸)单元格的相应Core Data对象.

感谢帮助 !

objective-c uitableview ios 3dtouch

10
推荐指数
2
解决办法
1万
查看次数

CloudKit在不同的iCloud帐户之间共享数据,但不与所有人共享

在我的应用程序中,我想通过iCloud与其他iCloud用户共享数据,但不是与整个世界共享,而是与选定的其他iCloud用户共享.

我想到了一种可行的方法,但我不确定它是否会起作用,如果我忘记或误解了一些事情.

假设用户A希望能够与其他iCloud用户共享字符串,但不能与所有人共享.因此,用户A希望向用户B分享"Hello World",但不向用户C分享,而不是用户D.

所以我的应用程序有一个公共数据库和一个记录类型,每个人都一样.在该记录类型中,有一个String类型的字段,对每个人来说都是相同的.

现在,用户A将记录"Hello World"保存到iCloud.接下来是诀窍:我会在字符串中添加一个像UUID这样的唯一标识符,以便将"Hello World1230ABD6-3C61-1234-802E-D866F09AC012"等内容上传到iCloud.

现在用户A需要告诉用户他想要用他的UUID共享数据,因此用户A告诉用户B.现在用户A的UUID将作为谓词添加到用户B的CKSubscription.

这将允许用户B从用户A获取字符串,但用户C或用户D不会收到CKNotification,因为他们的CKSubscription中没有用户A的UUID.

这会起作用吗?或者是否有其他设计模式允许通过iCloud与其他iCloud帐户共享/同步,但不是与所有人(公共)共享/同步?

PS我想要共享的数据不敏感,所以它不需要非常安全.数据对每个人(公共)都不感兴趣,因此只需要与选定的其他iCloud帐户共享...

我很感激任何想法或提示如何实现这一目标!

谢谢

objective-c ios icloud cloudkit

8
推荐指数
2
解决办法
4373
查看次数

全局标识符? - iCloud + Core Data + Ensembles - 删除对象时重复

我正在尝试在我的Core Data应用程序中实现iCloud同步.我不是那么专业的编程,这真的是我学到的一个高级主题......我发现Drew McCormack的核心数据同步框架"Ensembles".它似乎使iCloud Sync更容易.

我将它集成到我的应用程序中,只要我将新对象添加到我的Core Data模型中,同步就能很好地工作.但是当我删除一个对象时,它会创建重复项.然后从重复复制.我最终拥有3-4次相同的条目(对象)......

这是为什么?我究竟做错了什么?我做了一些研究,我的猜测是全局标识符可以解决这个问题吗?

什么是全局标识符?我猜他们有助于避免重复!?但是我该怎么设置呢?我真的不知道,做了很多研究但却找不到答案.

感谢帮助!

更新: 感谢您的帮助!我读了自述书和书,但因为我是初学者,所以一切都不清楚.

我想我现在理解在Ensembles中使用全局标识符,但我不知道我是否正确地使用它.

如果我理解正确,我必须为每个对象分配一个标识符.我可以通过将其存储在属性中来实现.只要它是唯一的NSString,这个标识符可以是任何东西吗?

在我的应用程序中,用户可以存储不同的东西,假设名称,文本,标题,日期等.该应用程序基于Xcode中的Master-Detail-View模板,并使用Core Data.我的核心数据模型只有一个具有一些属性的实体,大多数是字符串和NSDate.没有关系或任何东西.如果用户点击"+",则创建一个新对象,并将用户输入的内容存储在属性中.

我添加全局标识符的做法是添加一个存储它的新属性.所以当我创建一个新对象时

/// I did find that to use as identifier !?

NSString *taskUniqueStringKey = newManagedObject.objectID.URIRepresentation.absoluteString;

/// and store it in the attribute.

[newManagedObject setValue:taskUniqueStringKey forKey:@"coreDataObjectID"]; 
Run Code Online (Sandbox Code Playgroud)

然后我用这个:

- (NSArray *)persistentStoreEnsemble:(CDEPersistentStoreEnsemble *)ensemble globalIdentifiersForManagedObjects:(NSArray *)objects
{

return [objects valueForKeyPath:@"coreDataObjectID"];;

}
Run Code Online (Sandbox Code Playgroud)

这似乎对我有用.但我做得对吗?这是分配全局标识符的正确位置吗?我没有awakeFromInsert!

如果这个工作,我得到了下一个问题.我的应用已经存在,用户在更新之前保存的旧条目将缺少全局标识符.我该怎么办?我认为我已经得到了什么以及什么是唯一的,我唯一能想到的是在创建对象时保存[NSDate date]的属性.

我试图使用它,但我失败了因为Ensembles只会接受NSString而不是NSDate!?我可以使用这个日期属性,这是否足够独特并且可以作为gloabl标识符使用?如果是的话,请你给我一些如何将这个从日期转换为字符串的代码示例?

与Ensembles同步非常有效.没有重复,您可以关闭iCloud并保留条目并再次打开它,它会像它应该同步而不会丢失本地存储的对象左右.合奏真的很酷!我看到一些小的奇怪的行为,有时同步需要很长时间,有时它真的很快,如果我在两个不同的设备上在短时间内编辑的东西,它有点混乱像我刚刚删除的对象重新出现.但我觉得这很正常吗?如果我在不同的设备上使用应用程序之间花一些时间一切正常.

我理解正确,只有一种方法可以调用同步:

- (void)syncWithCompletion:(void(^)(void))completion
{
if (self.ensemble.isMerging) return;


if (!self.ensemble.isLeeched) {
    [self.ensemble leechPersistentStoreWithCompletion:^(NSError *error) {
        if (error) NSLog(@"Error in leech: %@", error);

        if (completion) …
Run Code Online (Sandbox Code Playgroud)

core-data identifier duplicates icloud ensembles

5
推荐指数
1
解决办法
829
查看次数

无法为NSObject或WKInterfaceController的属性指定setter'setTitle:'

我正在尝试设置WKInterfaceTable.我跟着苹果文档.我的标签没有获取文本,我在控制台中收到此错误消息:

Cannot specify setter 'setTitle:' for properties of NSObject or WKInterfaceController
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?Objective-C拜托.这是我的代码:

.H

#import <Foundation/Foundation.h>
#import <WatchKit/WatchKit.h>

@interface MainRowType : NSObject

@property (strong, nonatomic) IBOutlet WKInterfaceImage *image;
@property (strong, nonatomic) IBOutlet WKInterfaceLabel *title;

@end
Run Code Online (Sandbox Code Playgroud)

.M

#import "MainRowType.h"

@implementation MainRowType


@end
Run Code Online (Sandbox Code Playgroud)

.H

#import <WatchKit/WatchKit.h>
#import <Foundation/Foundation.h>
#import "MainRowType.h"

@interface WatchTableController : WKInterfaceController


@property (strong, nonatomic) IBOutlet WKInterfaceTable *tableView;
@property (strong, nonatomic) NSMutableArray *titleArray;


@end
Run Code Online (Sandbox Code Playgroud)

.M

我称这种方法

- (void)configureTableWithData:(NSMutableArray*)dataObjects {

    [self.tableView setNumberOfRows:[dataObjects count] withRowType:@"mainRowType"];

    for (NSInteger i = 0; i < self.tableView.numberOfRows; …
Run Code Online (Sandbox Code Playgroud)

objective-c ios watchkit wkinterfacetable

5
推荐指数
1
解决办法
538
查看次数

Format指定类型"unsigned long"但参数的类型为"int"

Format指定类型"unsigned long"但参数的类型为"int"

我在XCode中得到此错误,无论我放入什么格式说明符,或者如果我更改为NSInteger,NSUInteger,long或int,仍然会出错!?我怎样才能解决这个问题?

-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Run Code Online (Sandbox Code Playgroud)

{

我有这些行,第2行是@"%lu"的错误,(行%max)

NSUInteger max = (NSInteger)[self.calendar maximumRangeOfUnit:NSCalendarUnitHour].length;
[lblDate setText:[NSString stringWithFormat:@"%lu",(row % max)]]; 
lblDate.textAlignment = NSTextAlignmentRight;
Run Code Online (Sandbox Code Playgroud)

感谢帮助 !

objective-c format-specifiers ios

3
推荐指数
1
解决办法
5500
查看次数